Как получить массив элементов в свойствах с linq для сущностей? - PullRequest
0 голосов
/ 02 января 2012

Рассмотрим:

class Foo
{
    public string Name{get;set;}
    public string[] WebSites{get;set;}
}

У меня есть запрос:

var allFoo=db.Persons.Select(p=>new Foo()
{
    Name=p.Name,
    WebSites=p.WebSites.Select(q=>q.Caption).ToArray(),
}).ToList();

Но я получаю ошибку "LINQ to Entities не распознает метод 'System.String [] ToArray ...".

Как мне получить всю строку foo и веб-сайтов в массиве с linq для сущностей?

Ответы [ 3 ]

1 голос
/ 02 января 2012

Примерно так должно работать:

var allFooAnon = db.Persons.Select(p => new
{
  Name = p.Name,
  Websites = p.Websites.Select(q => q.Caption)
});

var list = new List<Foo>();
foreach (var anon in allFooAnon)
{
  list.Add(new Foo
  {
    Name = anon.Name,
    Websites = anon.Websites.ToArray()
  });
}

Это создает коллекцию объектов с анонимным типом для хранения результатов запроса.Затем вы можете перебрать эти объекты, чтобы создать коллекцию Foo.

0 голосов
/ 02 января 2012

Чтобы использовать такие методы, как ToArray, вам может потребоваться загрузить все объекты в memery с помощью ToList.

0 голосов
/ 02 января 2012

С учетом вашего замечания: но я получаю ошибку "LINQ to Entities не распознает метод" System.String [] ToArray ..

Я бы предложил удалить .ToArray () из

WebSites=p.WebSites.Select(q=>q.Caption).ToArray(), 

Так как видимо результат для

p.WebSites.Select(q=>q.Caption) is a System.String[]

Это только означает, что вы будете выполнять явное приведение из System.String [] к строке [], что должно быть хорошо.

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