我有2个实体Line
和Tag
。关系是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])'方法,并且此方法无法转换为商店表达。
知道我怎么能用逗号分隔标签列表吗?
提前致谢。
答案 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;