Linq выберите, где значение свойства объекта соответствует значению свойства любого элемента в другом списке

#c# #linq

Вопрос:

Используя Linq в C #, как мне выбрать элементы из списка объектов одного типа сущности, где значение свойства любого из объектов соответствует значению свойства любого объекта в списке, содержащем объекты другого типа сущности? Я ищу реальное выражение, используя свободный синтаксис, который выполняет функцию следующего псевдокода (объект A и объект B не связаны ключами)

 MyContext.ListOfEntityA.Where(a => ListOfEntityB.Contains(ListOfEntityB.Property.Value == a.Value))
 

Чтобы уточнить, содержат ли коллекции объекты, которые выглядят следующим образом:

 ListOfEntityA
-------------
EntityA_Object.Property = 1
EntityA_Object.Property = 2

ListOfEntityB
-------------
EntityB_Object.Property = 2
 

Затем выражение должно возвращать 2-й элемент в списке.

Ответ №1:

Попробуйте это, теперь это будет работать.

 MyContext.ListOfEntityA.Where(a => ListOfEntityB.Exists(b => b.Property.Value == a.Property.Value));
 

Ответ №2:

Вы можете использовать выражение соединения LINQ для объединения двух списков в соответствующем свойстве, отфильтровывая все элементы без совпадающих результатов.Результатом должны быть совпадающие элементы из обоих списков в качестве результата IEnumerable.

 ListOfEntityA
.Join(ListOfEntityB, l => l.Property, r => r.Property, (a, b) => new { EntityAObject = a, EntityBObject = b });
 

Ответ №3:

 ListOfEntityA.Where(a => ListOfEntityB.Any(b => b.Property == a.Property))

 

Any проверяет, есть ли совпадение с элементом в ListOfEntityB или нет, и Where возвращает объекты, ListOfEntityA для которых было найдено совпадение. Смотрите в реальном времени:

https://dotnetfiddle.net/rbOJg5

Комментарии:

1. Спасибо @Reza, но это возвращает логическое значение, указывающее, есть совпадение или нет, и я хочу вернуть соответствующие объекты

2. Any проверяет, есть совпадение или нет, но Where возвращает объекты, ListOfEntityA для которых было найдено совпадение. Смотрите вживую: dotnetfiddle.net/rbOJg5

3. Пожалуйста, включите дополнительную информацию и дополнительные пояснения в свой ответ, чтобы ответ не был просто необъяснимым блоком кода.