我从MySql数据库获取客户数据的数据表和来自Web服务的客户对象。
我想比较数据表中的每个值和对象中的值,如果有一个字段不同,我想要执行某些任务。
我知道我可以从数据表中获取值:
string mCompanyName = row["Company Name"].ToString();
string mCreatedDate = row["Created Date"].Tostring();
//etc..
然后我从Web服务中获取值
string wsCompanyName = customer.companyName;
string wsCreatedDate = customer.createdDate;
大约有50个字段正在进行
if( mCompanyName != wsCompanyName & mCreatedDate != wsCreatedDate and so on..) (or similar)
{
//Do something
}
似乎有点乏味而且不太好,所以我应该怎么做呢?有没有更好的方法将其放入列表并使用一些花哨的LINQ?
提前致谢。
答案 0 :(得分:2)
对于这样的情况,我有时会把它们(“对象”)放在IEnumerable中(确保“排列”)并使用SequenceEqual扩展方法。它执行标准Equals()
'并且“足够便宜以供我使用”。
例如:
var equal = (new object[] { row["A"], row["B"] })
.SequenceEqual(new object[] { x.A, x.B });
当然,这需要LINQ。
答案 1 :(得分: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中查找具有相同名称的条目。
我不会为每个数据创建单独的变量。它很难维护,也不会很好地扩展(许多复制和粘贴)。
答案 2 :(得分:0)
我认为这可能会对您有所帮助,但需要对其进行修改才能在您的场景中使用stackoverflow link