2012-05-03 31 views
1

私は2つのエンティティLineTagを持っています。関係はLine *----* Taglinqを使用してエンティティコレクションのコンマ区切りリストを取得

からline私はタグオブジェクトのリストを返すナビゲーションプロパティLine.Tagsです。 Tag.Nameは、後の文字列値imです。私は本当に必要なもの

はそうのようにカンマ区切りの方法ですべてのタグ名を取得することです:

tag1, tag2, tag3 

私は投影でこれを実行しようとしましたが、それはそれはサポートtoString()

var o = dgvLines.CurrentRow.DataBoundItem as Order; 
       var r = _rs.Lines.Where(y => y.InvoiceNo == o.InvoiceNo).Select(x => new 
       { 
        ReturnNo = x.Return.ReturnNo, 
        Part = x.Part, 
        Tags = String.Join(", ", x.Tags.ToList().Select(t => t.Name)) 
       }); 
       dgvExistingParts.DataSource = r; 
をdoesntの言いました

エラー:

参加可能System.String方法」を認識しないエンティティへのLINQ(可能System.String、System.Collections.Generic.IEこのメソッドをストア式に変換することはできません。

このカンマ区切りのタグリストをどのように取得できますか?

ありがとうございます。

答えて

6
var r = _rs.Lines.Where(y => y.InvoiceNo == o.InvoiceNo).ToList().Select(x => new 
{ 
    ReturnNo = x.Return.ReturnNo, 
    Part = x.Part, 
    Tags = String.Join(", ", x.Tags.Select(t => t.Name)) 
}); 
+1

Entity Frameworkのは、 'String.Joinをサポートしていません。 '。名前をコレクションに戻してから、dbコールの後に 'String.Join'を呼び出す必要があります。 –

+0

@MuhammadA:それから 'x.Tags.AsEnumerable()。Select(t => t.Name)'または '_rs.Lines.Where(...)。AsEnumerable()。Select(...) ; – Oliver

+0

@MuhammadA:パフォーマンスに悪影響を与える可能性があります(チェックする必要があります。返されるレコードの数はわかりません)。選択前にToList()を呼び出してください。 – empi

2

あなたが必要なデータを取り戻す、その後、通常のコードで仕事をしなければならないので、あなたは、SQLで連結を行うことはできません。

var o = dgvLines.CurrentRow.DataBoundItem as Order; 

var r = _rs.Lines 
    .Where(y => y.InvoiceNo == o.InvoiceNo) 
    .Select(x => new 
    { 
     ReturnNo = x.Return.ReturnNo, 
     Part = x.Part, 
     TagNames = x.Tags.Select(t => t.Name), 
    } 
) 
    .ToList() // this runs the SQL on the database 
    .Select(x => new 
    { 
     ReturnNo = x.ReturnNo, 
     Part = x.Part, 
     Tags = String.Join(", ", x.TagNames), 
    } 
) 
    .ToList(); 

    dgvExistingParts.DataSource = r; 
+0

単純にレイアウトされたコードをありがとう。 – sprocket12

+0

あなたは歓迎です、ムハンマド:) –

関連する問題