2012-01-02 8 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は... []たToArray可能System.String方法」を認識しません" を取得します。

私はどのように取得するlinqとエンティティに配列のすべてのfooとウェブサイトの文字列ですか?

+0

Personsクラスの定義を表示できますか? – rejj

+1

役に立つかもしれないhttp://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/d53801f9-606e-4081-9360-b7efbaa93ad2 – keyboardP

答えて

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

は、あなたの発言を考えると..しかし、私は、メソッド「[]たToArray可能System.String認識していないエンティティにLINQ "エラーが出る

私は

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

+0

です実際に私の悪い...私はエラーから結論に飛び込んだ.... – tryme

0

ToArrayのようなメソッドを使用するには、ToListを使用してすべてのオブジェクトをmemeryにロードする必要があります。このような

関連する問題