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 回答