/ / Como obtenho uma matriz de itens em propriedades com o linq para entidades? - c #, linq, linq-para-entidades

Como obtenho uma matriz de itens em propriedades com o linq para entidades? - c #, linq, linq-para-entidades

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 № 1

Algo 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.