列出<object> compare </object>

时间:2013-08-27 14:31:10

标签: c# linq list

我搜索过一些例子,但没有找到一个与我所拥有的和我想要达到的相似的例子。

我有2个列表

class object1
{
   string obj1_name;
   int obj1_qty;
}
List<object1> listA

class object2
{
   string obj2_name;
   int obj2_qty;
}
List<object2> listB;

现在,使用ListA作为主列表我想看看ListB是否包含一个具有相同名称的对象,如果是,那么数量是多少,因此obj1_qty = obj2_qty是否相互?如果没有,那就有差异,我需要在第三个列表中显示它,如果它们存在,则很可能是数量差异。注意,ListA可以大于或小于ListB

  • 显示所有列表A(主列表包含所有对象)
  • 显示两个列表中存在的名称/数量之间的差异。

格拉西亚斯

2 个答案:

答案 0 :(得分:3)

喜欢加入的Souncs会为你效劳:

var query = from a in listA
            join b in listB on a.obj1_name equals b.obj2_name
            where a.obj1_qty != b.obj2_qty
            select new {
                Name = a.obj1_name,
                QtyA = a.obj1_qty,
                QtyB = b.obj2_qty,
                Diff = a.obj1_qty - b.obj2_qty
                };

答案 1 :(得分:2)

最简单的方法就是使用Linq的连接

var items = from l1 in listA
            join l2tmp1 in listB on l1.obj1_name equals l2.obj2_name into l2tmp2
            from l2 in l2tmp2.DefaultIfEmpty();
            select new { 
                 ItemA = l1, 
                 ItemB = l2, 
                 Name = l1.obj1_name, 
                 Difference = (l2 == null) ? 0 : l1.ob1_qty - l2.ob2_qty
            };

items现在将持有IEnumerable匿名类,该类包含对ListA中项目的引用,对listB中项目的引用,匹配名称和差异。