我正在尝试向以下LINQ表达式添加一列。我希望该列包含一个名为WasteItems的许多表中的文本值的字符串串联。加入将是“Waste.WasteId = WasteItem.WasteId”。我的问题是我需要在单个动态列中显示一个字符串,如“EW(5); EX(3)”,如果WasteItem中有8个记录,则包含2个字符串的列称为WasteItem.EWC。希望有道理,必须有一种有效的方法,因为我意识到LINQ非常强大。我是新手,不知道如何开始或解决这个问题:
return from waste in this._db.Wastes
where (from u in _db.UsersToSites.Where(p => p.UserId == userId && p.SystemTypeId == SystemType.W)
select u.SiteId)
.Contains(waste.SiteId)
orderby waste.Entered descending select waste;
感谢提前
答案 0 :(得分:0)
这样的事情应该做:
wastes.GroupJoin(db.WasteItems, w => w.WastId, wi => wi.WasteId, (w,wi) => new { w, wi })
.AsEnumerable()
.Select(x => new
{
x.w.Name,
Items = string.Join(", ", x.wi.GroupBy(wi => wi.EWC).Select(g => string.Format("{0} ({1})", g.Key, g.Count())))
})
wastes
是查询的结果。 AsEnumerable()
是必需的,因为实体框架无法处理string.Join
,因此必须在内存中处理该部分。
显然,我无法检查语法,但至少它可能会告诉你要走的路。