Linq查询两个列表对象

时间:2012-01-26 16:37:39

标签: c# linq

我有两个对象:

ObjectA
{
   string code;
   string country;
}

ObjectB
{
   string code;
   string otherstuff;
}

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

4 个答案:

答案 0 :(得分:34)

听起来您正在尝试查找ObjectBcode中存在List<ObjectA>值的所有List<ObjectA> listA = ...; List<ObjectB> listB = ...; var all = listB.Where(b => listA.Any(a => a.code == b.code)); 个实例。如果是这样,请尝试以下

{{1}}

答案 1 :(得分:14)

听起来您想要将ObjectA列表与code属性上的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

答案 2 :(得分:6)

为了有效地执行此操作,您可以先将代码放入HashSet<string>,然后使用Contains()查询来检查相关的B是否包含hashset中包含的代码:

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

答案 3 :(得分:5)

我会将ObjectA列表的代码放入HashSet中,否则您的查询将成为O(n 2 )操作。像这样是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));