#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
для которых было найдено совпадение. Смотрите в реальном времени:
Комментарии:
1. Спасибо @Reza, но это возвращает логическое значение, указывающее, есть совпадение или нет, и я хочу вернуть соответствующие объекты
2.
Any
проверяет, есть совпадение или нет, ноWhere
возвращает объекты,ListOfEntityA
для которых было найдено совпадение. Смотрите вживую: dotnetfiddle.net/rbOJg53. Пожалуйста, включите дополнительную информацию и дополнительные пояснения в свой ответ, чтобы ответ не был просто необъяснимым блоком кода.