У меня есть объект с переменным размером списка элементов (entryList в примере кода) и список людей, у каждого из которых есть список элементов. Я хочу вернуть только тех людей, у которых есть все элементы входящего списка.Linq возвращает родительские объекты, у которых есть дочерние элементы, соответствующие всем элементам в отдельном списке
Так что, глядя на пример, я хочу, чтобы только 1 и 3 человека вернулись.
Люди находятся в базе данных, и я хочу получить как можно меньше данных, поэтому я пытаюсь выяснить, что должен сделать запрос linq для этого? Если бы я знал, что длина входящего списка всегда будет такой же, как я мог бы сделать »... Любые (..) & & ... Любые (...) & &" и т. Д. - но длина будет отличаться.
void Main()
{
var incomingList = new IncomingItem();
var matchItem1 = new MatchItem { ItemType = "objectId", ItemValue = "60" };
var matchItem2 = new MatchItem { ItemType = "area", ItemValue = "CU" };
incomingList.MatchList = new List<MatchItem>();
incomingList.MatchList.Add(matchItem1);
incomingList.MatchList.Add(matchItem2);
var people = new List<Person>();
var person1 = new Person { Id = 1 };
person1.ListOfItems = new List<Item>();
person1.ListOfItems.Add(new Item { ItemType = "objectId", ItemValue = "60" });
person1.ListOfItems.Add(new Item { ItemType = "objectId", ItemValue = "1" });
person1.ListOfItems.Add(new Item { ItemType = "objectId", ItemValue = "30" });
person1.ListOfItems.Add(new Item { ItemType = "area", ItemValue = "CO" });
person1.ListOfItems.Add(new Item { ItemType = "area", ItemValue = "CU" });
people.Add(person1);
var person2 = new Person { Id = 2 };
person2.ListOfItems = new List<Item>();
person2.ListOfItems.Add(new Item { ItemType = "objectId", ItemValue = "60" });
people.Add(person2);
var person3 = new Person { Id = 3 };
person3.ListOfItems = new List<Item>();
person3.ListOfItems.Add(new Item { ItemType = "objectId", ItemValue = "60" });
person3.ListOfItems.Add(new Item { ItemType = "area", ItemValue = "CU" });
people.Add(person3);
var person4 = new Person { Id = 4 };
person4.ListOfItems = new List<Item>();
person4.ListOfItems.Add(new Item { ItemType = "objectId", ItemValue = "12" });
people.Add(person4);
}
public class IncomingItem
{
public IList<MatchItem> MatchList { get; set; }
}
public class MatchItem
{
public List<object> SomeMoreInformation { get; set; }
public string ItemType { get; set; }
public string ItemValue { get; set; }
}
public class Person
{
public int Id { get; set; }
public IList<Item> ListOfItems { get; set; }
}
public class Item
{
public int Id { get; set; }
public int PersonId { get; set; }
public string ItemType { get; set; }
public string ItemValue { get; set; }
}
Спасибо, это работает, но я не могу понять, почему это происходит, когда он не ссылается на оба свойства, что мне не хватает? – crockels
Нет, он должен соответствовать как ItemValue, так и ItemType, а не только ItemValue. (Что, по-вашему, делает ваше решение, но я не вижу, как это делается!) – crockels
Хотя это работает на примере, он не работает при перемещении в мой основной код. Я получаю ошибку EF: Невозможно создать постоянное значение типа «DTO.MatchListIten». В этом контексте поддерживаются только примитивные типы или типы перечислений. DTO.MatchListItem не является объектом базы данных, Person и Item. – crockels