#c# #linq
#c# #linq
Вопрос:
У меня есть коллекция родительских типов, которая содержит список дочерних типов:
public class ParentType
{
public int ID;
public string Name;
public List<ChildType> ChildTypes { get; set; }
}
public class ChildType
{
public int ID;
public string Name;
}
Мне нужно использовать LINQ, чтобы превратить их в коллекцию следующего типа:
public class MixedType
{
public int ParentID;
public string ParentName;
public int ChildID;
public string ChildName;
}
Я уже пробовал (выберите много), но не смог получить свойства родительского типа.
Комментарии:
1. Используете ли вы linq для sql или entity framework?
Ответ №1:
При условии, что я понимаю, что вы собираетесь делать, вы должны использовать эту перегрузку расширения SelectManay, которое позволяет вам вызывать функцию выбора результата для каждого элемента в нем.
Запрос должен быть:
var lst = new List<ParentType>();
var query = lst.SelectMany(p => p.ChildTypes,
(parent, child) => new { parent, child }
)
.Select(p => new MixedType
{
ChildID = p.child.ID,
ChildName = p.child.Name,
ParentID = p.parent.ID,
ParentName = p.parent.Name
});
Удачи!
Ответ №2:
from p in parents
from c in p.Children
select new MixedType(...)
Должно сработать.
Ответ №3:
Я полагаю, вы пытаетесь спроецировать коллекцию MixedType из одного экземпляра ParentType
var parent = new ParentType();
var mixedList = parent.ChildTypes
.Select(c => new MixedType
{
ParentID = parent.ID,
ParentName = parent.Name,
ChildID = c.ID,
ChildName = c.Name
});
Ответ №4:
Если я вас правильно понял, вы могли бы попробовать что-то вроде этого:
var mixed =
from child in parent.ChildTypes
select new MixedType
{
ParentID = parent.ID,
ParentName = parent.Name,
ChildID = child.ID,
ChildName = child.Name
};
Комментарии:
1. Это сработало бы, если бы у меня был один родитель.. Я не был ясен в своем вопросе, поэтому я изменил его, чтобы объявить, что у меня есть коллекция родительских типов…