2012-01-02 55 views
0

考虑:如何获取linq属性中的项目数组?

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到实体无法识别方法“System.String [] ToArray的......”。

如何让所有的foo和网站字符串与linq实体数组?

+0

请问您可以展示您的人员类的定义吗? – rejj 2012-01-02 13:42:45

+1

可能很有用http://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/d53801f9-606e-4081-9360-b7efbaa93ad2 – keyboardP 2012-01-02 13:43:12

回答

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

鉴于你的话,但我得到错误“LINQ到实体无法识别方法“System.String [] ToArray的..

我建议从

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

因为显然是

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

这样做的结果只能意味着你将做从System.String []显式类型转换成字符串[]这应该是罚款。

+0

-1:'p.WebSites.Select(q => q.Caption )'是'IEnumerable'的类型' – Stefan 2012-01-02 13:45:55

+0

确实我的不好...我从错误中跳到了结论.... – tryme 2012-01-02 13:50:32

0

要使用像ToArray这样的方法,您可能必须使用ToList将所有对象加载到内存中。