使用linq获取以逗号分隔的实体集合列表

时间:2012-05-03 13:50:51

标签: c# linq entity-framework

我有2个实体LineTag。关系是Line *----* Tag

line我有一个导航属性Line.Tags,它返回一个Tag对象列表。 Tag.Name是字符串值im after。

我真正需要的是以逗号分隔的方式获取所有标记名称,如下所示:

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])'方法,并且此方法无法转换为商店表达。

知道我怎么能用逗号分隔标签列表吗?

提前致谢。

2 个答案:

答案 0 :(得分: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 :(得分: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;