Если у меня есть список внутри класса внутри списка, где классы определяются следующим образом:Как извлечь данные из списка родительских объектов с дочерними элементами?
class Class1
{
public int Id { get; set; }
public List<Class2> Class2s { get; set; }
}
class Class2
{
public string Name { get; set; }
public string Value { get; set; }
}
я могу создать список класса типа Result
где Result
является:
class Result
{
public int Class1Id { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}
Обратите внимание, что класс Result
содержит значения от Class1
и Class2
.
Как так:
var results = new List<Result>();
foreach (var class1 in class1s) //class1s is a List of Class1
{
foreach (var class2 in class1.Class2s)
{
results.Add(new Result()
{
Class1Id = class1.Id,
Name = class2.Name,
Value = class2.Value,
};
}
}
Как я могу сделать это с помощью запроса Linq?
Я попытался следующие:
IList<Result> list = class1s.Select(c => c.Class2s.Select(c2 => new Result()
{
Class1Id = c.Id,
Type = c2.Type,
Name = c2.Name,
}).ToList()).ToList();
Но это терпит неудачу с ошибкой:
Cannot implicitly convert type 'System.Collections.Generic.List<System.Collections.Generic.List<Results>' to 'System.Collections.Generic.IList<Results>'. An explicit conversion exists (are you missing a cast?)
Примечание:
Дубликаты не отвечают на вопрос, как они этого не делают обратитесь к проблеме, когда результирующий список является списком внутренних классов И с использованием свойства внутреннего класса.
@CodeCaster и как я должен это делать с помощью SelectMany, когда одно из свойств находится во внешнем классе, а не в списке? – TheLethalCoder
Предлагаю вам изменить заголовок и вопрос, чтобы объяснить, что вы хотите включить данные из родительских объектов. Как бы то ни было, немедленный ответ на «Как сгладить список списков» - «Use SelectMany». Одно важное отличие теряется в коде –
У вас нет списка списков, у вас есть список родительских и дочерних объектов. –