Принятие этих объектов...
class MyClass
{
int ID {get;set;}
string Name {get;set;}
List<MyOtherClass> Things {get;set;}
}
class MyOtherClass
{
int ID {get;set;}
string Value {get;set;}
}
Как я выполняю LINQ к Запросу Объектов, с помощью проекции как ниже, которая даст мне Список? Это хорошо работает с IEnumerable (принимающий MyClass. Вещами является IEnumerable, но я должен использовать Список),
MyClass myClass = (from MyClassTable mct in this.Context.MyClassTableSet
select new MyClass
{
ID = mct.ID,
Name = mct.Name,
Things = (from MyOtherClass moc in mct.Stuff
where moc.IsActive
select new MyOtherClass
{
ID = moc.ID,
Value = moc.Value
}).AsEnumerable()
}).FirstOrDefault();
Заранее спасибо за справку!
Нет. Вы должны сделать это в L2O.
Итак, вы могли сделать:
var q = (from MyClassTable mct in this.Context.MyClassTableSet
select new // note anonymous type; important!
{
ID = mct.ID,
Name = mct.Name,
Things = (from MyOtherClass moc in mct.Stuff
where moc.IsActive
select new MyOtherClass
{
ID = moc.ID,
Value = moc.Value
}
}).AsEnumerable();
MyClass myClass = (from mct in q
select new MyClass
{
ID = mct.ID,
Name = mct.Name,
Things = mct.Things.ToList()
}).FirstOrDefault();
Невозможно сделать это в одном запросе.
Я не уверен, о чем именно вы спрашиваете, но List
действительно реализует IEnumerable
(который является просто интерфейсом для перечислимой последовательности).
В коде, который будет выполнять вашу проекцию и в котором Things будет списком вместо IEnumerable, будет использоваться оператор ToList (), который создает List
из любого IEnumerable
это:
MyClass myClass = (from MyClassTable mct in this.Context.MyClassTableSet
select new MyClass
{
ID = mct.ID,
Name = mct.Name,
Things = (from MyOtherClass moc in mct.Stuff
where moc.IsActive
select new MyOtherClass
{
ID = moc.ID,
Value = moc.Value
}).ToList()
}).FirstOrDefault();