比较大量变量的最有效方法是什么?C#

3
我正在从MySql数据库获取包含客户数据的数据表格,并从Web服务获取客户对象。
我想将数据表中的每个值与对象中的值进行比较,如果有一个字段不同,我想执行一些任务。
我知道可以使用以下方法从数据表中获取值:
string mCompanyName = row["Company Name"].ToString();
string mCreatedDate = row["Created Date"].Tostring();
//etc..

然后我从网络服务中获取值。
string wsCompanyName = customer.companyName;
string wsCreatedDate = customer.createdDate;

大约有50个领域正在进行。
if( mCompanyName != wsCompanyName & mCreatedDate != wsCreatedDate and so on..) (or similar)
{
    //Do something
}

似乎有点乏味且不太好,那么我该怎么做呢?有没有更好的方法将其放入列表并使用一些高级的LINQ呢?
提前感谢。
3个回答

2

对于这种情况,我有时会将它们(“对象”)放入IEnumerable中(确保“排列整齐”),并使用SequenceEqual扩展方法。它执行标准的Equals()操作,并且对于我的使用来说是“足够便宜”的。

例如:

var equal = (new object[] { row["A"], row["B"] })
    .SequenceEqual(new object[] { x.A, x.B });

这当然需要使用LINQ。

1
我会把它们放在一个字典里,然后进行搜索:
Dictionary<string, string> mData = new Dictionary<string, string>();

mData.Add("Company Name", row["Company Name"].ToString());


Dictionary<string, string> wsData = new Dictionary<string, string>();

wsData.Add("Company Name", customer.CompanyName);

然后循环遍历:

foreach (KeyValuePair<string, string> pair in mData)
{
    if (wsData[pair.Key] == pair.Value) 
    { 
        // Do something
    }
}

这样,对于 mData(来自您的数据库的数据)中的每个条目,它都会查找 wsData 中具有相同名称的条目。

我不会为每个数据创建单独的变量。这将很难维护,并且不会很好地扩展(需要大量复制和粘贴)。


谢谢你的回复,mfanto。我有一个问题,如果有些值是整数,有些是日期,有些是双精度等等,该怎么办呢? - Nick
@Nick,然后使用Dictionary<string,object>object.Equals。但是,这可能会导致其他问题,例如"1".Equals(1) -> false,因此“更安全”的解决方案可能是首先将它们全部转换为字符串(如果适用),或者添加一个粗略的类型检查(a.GetType() == b.GetType),并在不对齐时快速失败。 - user166390

0

我认为这可能对你有所帮助,但需要修改以在你的情境中使用 stackoverflow链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接