LINQ к проекции Объектов вложенного списка

Принятие этих объектов...

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();

Заранее спасибо за справку!

7
задан abatishchev 23 June 2010 в 22:39
поделиться

2 ответа

Нет. Вы должны сделать это в 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();

Невозможно сделать это в одном запросе.

14
ответ дан 6 December 2019 в 19:33
поделиться

Я не уверен, о чем именно вы спрашиваете, но 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();
1
ответ дан 6 December 2019 в 19:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: