Considerar:
class Foo
{
public string Name{get;set;}
public string[] WebSites{get;set;}
}
Eu tenho uma consulta:
var allFoo=db.Persons.Select(p=>new Foo()
{
Name=p.Name,
WebSites=p.WebSites.Select(q=>q.Caption).ToArray(),
}).ToList();
Mas eu recebo o erro "LINQ to Entities não reconhece o método" System.String [] ToArray ... ".
Como obter todas as strings foo e websites em um array com linq para entidades?
Respostas:
1 para resposta № 1Algo como isso deve funcionar:
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()
});
}
Isso cria uma coleção de objetos anonimamente tipados para manter os resultados da consulta. Você pode então iterar sobre esses objetos para criar sua coleção de Foo
.
0 para resposta № 2
Para usar métodos como ToArray
você pode ter que carregar todos os objetos para memery usando ToList
.
-1 para resposta № 3
Dada a sua observação: Mas eu recebo o erro "LINQ to Entities não reconhece o método" System.String [] ToArray ..
Eu sugeriria remover o .ToArray () de
WebSites=p.WebSites.Select(q=>q.Caption).ToArray(),
Desde aparentemente o resultado para
p.WebSites.Select(q=>q.Caption) is a System.String[]
Isso significa apenas que você fará uma conversão explícita de System.String [] para string [], que deve estar bem.