比较两个不同对象列表而不用for循环

时间:2014-02-21 10:09:34

标签: c# linq generics lambda

我有两个清单:

List<ObjA> AList;
List<ObjB> BList;

现在,我有一种方法可以将单个Obj AObj B进行比较:

void CompareObjAToObjB(ObjA a, ObjB b)
{
   ....
}

通过比较它来断言对象的各个元素。现在,我通过使用唯一标识符对两个列表进行排序,然后通过for循环迭代排序列表并调用Compare方法。

有没有更好的方法来比较使用Lambda表达式或Linq的列表?

Edit

确定。这是我的原始代码..

 Alist.sort((x,y) => string.Compare(x.acctNumber, y.acctNumber));
 Blist.sort((x,y) => string.Compare(x.acctNumber, y.acctNumber));

 for(int i =0; i< Alist.count; i++)
 {
      CompareObjAToObjB(Alist[i], Blist[i]);
 }

Alist包含我输入的repo对象,其中BList是通过Service API调用返回的Object。两者都包含相同的数据,但结构不同。

1 个答案:

答案 0 :(得分:5)

假设您要查找具有相同标识符的所有项目,可以使用Join

var inBoth = from a in AList
             join b in BList
             on a.UniqueIdentifier equals b.UniqueIdentifier 
             select new { a, b };

foreach(var ab in inBoth)
    Console.WriteLine("A:{0} B:{1}", a.ToString(), b.ToString()); // if ObjA  and ObjB have a meaningful ToString