列表<;对象>;比较

本文关键字:比较 gt 对象 列表 lt | 更新日期: 2023-09-27 18:29:08

我搜索了几个例子,但没有找到一个与我所拥有的和我想要实现的相似的例子。

我有两个列表

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(主列表包含所有对象)
  • 显示两个列表中存在的名称/数量之间的差异

感谢

列表<;对象>;比较

像加入这样的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
                };

最简单的方法就是使用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中项目的参考、匹配名称和差异。