Как получить массив в linq к сущности? - PullRequest
0 голосов
/ 25 февраля 2012
var sites = 
    from country in db.Countries
    select new SitiesViewByUser()                
    {         
        Country = country.Title, 
        City = country.Cities
            .Select(m => m.Title).ToArray()                                   
    };

Город - строка массива.

Мне нужно получить массив Cities.Title

этот код:

foreach(var item in sites)

получить эту ошибку:

Выражение LINQ to Entities не распознает метод "System.String [] ToArray [String] (System.Collections.Generic.IEnumerable` 1 [System.String])", поэтому его нельзя преобразовать вхранилище выражений.

Ответы [ 2 ]

5 голосов
/ 25 февраля 2012

Вы должны иметь возможность проецировать на анонимный тип, а затем использовать ToArray(), как только вы вернетесь в Linq для приземления объектов, используя AsEnumerable():

var sites = 
    (from country in db.Countries
    select new 
    { 
         Country = country.Title,
         Cities = country.Cities.Select(m => m.Title)
    })
    .AsEnumerable()
    .Select(country => new SitiesViewByUser()
    {         
        Country = country.Title, 
        City = country.Cities.ToArray()
    };

Проблема в том, что ToArray()просто не определен для поставщика Linq to Entities IQueryable (что будет эквивалентным вызовом в SQL?).Следовательно, вам нужно захватить свои результаты, переключиться на Linq to Objects и , затем вы можете материализовать их по мере необходимости.

0 голосов
/ 25 сентября 2016

Используйте ToList() вместо.Вы можете указать тип вашей собственности ICollection<T>, представляющий список элементов с известным количеством.

ToList() было добавлено для EF 6 в этом рабочем элементе http://entityframework.codeplex.com/workitem/808

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...