Group By Linq resultset



Linq:

var data = groups
.SelectMany(g => g.Warnings.Select(w => new { g.Category, Warnings = w }))
.Where(d => d.Warnings.Type == "Drug to Drug Interaction")
.Select(s => new Group(
Category.GetFromTitle(s.Category.Title), 
s.Warnings.ToEnumerable().ToReadOnlyCollection())
);

我有一个LINQ查询,提供如下的结果

实际输出:

tbody> <<tr>
标题1标题2
Category1Warning1
Category1Warning2
Category2Warning3
Category2Warning4

试着重构你的代码,

var data = groups
.Select(g => new Group(
Category.GetFromTitle(g.Category.Title),
g.Warnings
.Where(WhereIsWarningType)
.SelectMany(SelectWarningToEnumerable).ToReadOnlyCollection()))
.Where(WhereGroupHasWarnings)
.ToList();

bool WhereIsWarningType(Common.Warnings.Mkb.Warning w) => 
w.Type.Equals("Drug to Drug Interaction");
IEnumerable<Common.Warnings.Mkb.Warning> SelectWarningToEnumerable(Common.Warnings.Mkb.Warning w) => 
w.ToEnumerable();
bool WhereGroupHasWarnings(Group g) => g.Warnings.Any();

我相信下面的LINQ查询一定会帮助您通过结果集找到您想要的预期组。

var categoryWiseWarningList = (from cw in db.CategoryWarnings
join w in db.Warnings
on cw.warningId equals w.warningId
join c in db.Categories
on cw.categoryId equals c.categoryId
select new CategoryWarningViewModel
{
Category= c,
Warning = w
});

最新更新