2

私は2つのエンティティLineTag. 関係はLine *----* Tag

タグオブジェクトのリストを返すlineナビゲーションプロパティがあります。Line.Tags後のTag.Name文字列値です。

私が本当に必要としているのは、次のようにすべてのタグ名をコンマ区切りで取得することです。

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;

エラー:

LINQ to Entities はメソッド 'System.String Join(System.String, System.Collections.Generic.IEnumerable`1[System.String])' メソッドを認識せず、このメソッドをストア式に変換できません。

このコンマ区切りのタグのリストを取得する方法はありますか?

前もって感謝します。

4

2 に答える 2

8
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))
});
于 2012-05-03T13:53:51.623 に答える
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;
于 2012-05-03T14:20:55.023 に答える