Запрос Linq между двумя объектами списка
У меня есть два объекта:
ObjectA
{
string code;
string country;
}
ObjectB
{
string code;
string otherstuff;
}
И у меня есть List<objectA>
и List<ObjectB>
, и мне нужно найти все объекты в List<ObjectB>
, который содержит objectA.Code
.
Но не удается реализовать его в запросе LINQ.
Ответы
Ответ 1
Похоже, вы пытаетесь найти все экземпляры ObjectB
, которые имеют значение code
, присутствующее в любом из значений List<ObjectA>
. Если да, попробуйте следующее
List<ObjectA> listA = ...;
List<ObjectB> listB = ...;
var all = listB.Where(b => listA.Any(a => a.code == b.code));
Ответ 2
Похоже, вы хотите присоединиться к списку ObjectA со списком ObjectB в свойстве code
. Это один из способов:
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
Ответ 3
Чтобы сделать это эффективно, вы можете сначала поместить коды в HashSet<string>
, а затем использовать запрос Contains()
, чтобы проверить, имеет ли рассматриваемый B код, который содержится в хэш-наборе:
var codes = new HashSet<string>(listOfAs.Select(x => x.code));
var selectedBs = listOfBs.Where( x=> codes.Contains(x.code));
Ответ 4
Я бы поместил коды в список 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));