Linq查询两个列表对象
我有两个对象:
ObjectA { string code; string country; } ObjectB { string code; string otherstuff; }
我有List
和List
,我需要在List
objectA.Code
List
中找到包含objectA.Code
所有对象。 但无法管理在LINQ查询上实现它。
听起来您正在尝试查找ObjectB
所有实例,这些实例的任何List
值中都存在code
值。 若是,请尝试以下方法
List listA = ...; List listB = ...; var all = listB.Where(b => listA.Any(a => a.code == b.code));
听起来您想要将ObjectA列表与CodeB属性上的ObjectB列表一起加入。 这是一种方式:
List listOfA = ...; List 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
,然后使用Contains()
查询来检查相关的B是否包含hashset中包含的代码:
var codes = new HashSet(listOfAs.Select(x => x.code)); var selectedBs = listOfBs.Where( x=> codes.Contains(x.code));
我会将ObjectA
列表的代码放入HashSet中,否则您的查询将成为O(n 2 )操作。 像这样它是一个O(n)操作:
var aList = new List(); var bList = new List(); var aCodes = new HashSet(aList.Select(a => a.code)); var result = bList.Where(b => aCodes.Contains(b.code));