在两个列表对象之间执行Linq查询

本文关键字:之间 对象 执行 Linq 查询 列表 两个 | 更新日期: 2023-09-27 18:21:45

我有两个对象:

ObjectA
{
   string code;
   string country;
}
ObjectB
{
   string code;
   string otherstuff;
}

并且我有List<objectA>List<ObjectB>,并且我需要找到包含objectA.CodeList<ObjectB>中的所有对象。但无法在LINQ查询上实现它。

在两个列表对象之间执行Linq查询

听起来您正在尝试查找ObjectB的所有实例,这些实例的任何List<ObjectA>值中都存在code值。如果是,请尝试以下

List<ObjectA> listA = ...;
List<ObjectB> listB = ...;
var all = listB.Where(b => listA.Any(a => a.code == b.code));

听起来您想要将code属性上的ObjectA列表与ObjectB列表连接起来。这是一种方式:

List<ObjectA> listOfA = ...;
List<ObjectB> listOfB = ...;
var all = from a in listOfA
          join b in listOfB on a.code equals b.code
          select new {a,b};

结果是一个匿名对象列表,包含2个属性:a为ObjectA类型,b为ObjectB类型,具有相同的code

要有效地做到这一点,您可以首先将代码放入HashSet<string>中,然后使用Contains()查询来检查有问题的B是否包含在哈希集中的代码:

var codes = new HashSet<string>(listOfAs.Select(x => x.code));
var selectedBs = listOfBs.Where( x=> codes.Contains(x.code));

我会将ObjectA列表的代码放入HashSet中,否则您的查询将变成O(n2)操作。像这样,它是一个O(n)运算:

var aList = new List<ObjectA>();
var bList = new List<ObjectB>();
var aCodes = new HashSet<string>(aList.Select(a => a.code));
var result = bList.Where(b => aCodes.Contains(b.code));