考虑:
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 ......”。
如何通过linq实体获取所有foo和网站字符串?
答案 0 :(得分:1)
这样的事情应该有效:
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
。
答案 1 :(得分:0)
要使用ToArray
等方法,您可能需要使用ToList
将所有对象加载到memery中。
答案 2 :(得分:-1)
鉴于你的评论:但我收到错误“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 []到string []进行显式转换,这应该没问题。