我在DbContext
中有以下实体:
我在LINQPad中编写了LINQ to Entities查询,以查找order
通过的所有区域(An order
将某些区域传递给某个区域,区域可能会重复):
OrderItems.Include("NominalRoutings.OperationCatalog.WorkCenter.AreaSpecification")
.Where(x=>x.Id == 799730)
.Select(r=>r.NominalRoutings.Where(t => t.OperationCatalog.IsActive)
.Select(t=>new
{
AreaTitle=t.OperationCatalog.WorkCenter.AreaSpecification.Title,
t.ItemSequence
})
.OrderBy(t => t.ItemSequence)
.Select(g => new{g.ItemSequence,g.AreaTitle})
).FirstOrDefault()
这就是结果:
现在,我想找到Order
传递的区域,因此我将上面的查询更改为:
OrderItems.Include("NominalRoutings.OperationCatalog.WorkCenter.AreaSpecification")
.Where(x=>x.Id == 799730)
.Select(r=>r.NominalRoutings.Where(t => t.OperationCatalog.IsActive)
.Select(t=>new
{
AreaTitle=t.OperationCatalog.WorkCenter.AreaSpecification.Title,
t.ItemSequence
})
.OrderBy(t => t.ItemSequence)
.GroupBy(routing => routing.AreaTitle)
.Select(t=>t.Key)
).FirstOrDefault()
结果是:
但我希望得到以下结果:
因为我按ItemSequence
对区域进行了排序,然后按标题对其进行了分组。我错了吗?或者我的代码有问题吗?
答案 0 :(得分:0)
OrderBy
会返回IOrderedEnumerable
并显然会保留订单,但在使用GroupBy
时,不需要保留任何订单(如果它会返回IOrderedEnumerable
也是为了说清楚)。
我建议您先做GroupBy
然后Order
.Select(t => new { AreaTitle = t.OperationCatalog.WorkCenter.AreaSpecification.Title, t.ItemSequence })
.GroupBy(routing => routing.AreaTitle)
.OrderBy(t => t.Min(x => x.ItemSequence))
.Select(t=>t.Key)