2012-01-02 35 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將所有對象加載到內存中。