我有一个存储过程(我无法编辑),我通过linq调用。
存储过程返回值(下面更复杂但重要的数据):
Customer Stock Item Date Price Priority Qty
--------------------------------------------------------
CUST1 TAP 01-04-2012 £30 30 1 - 30
CUST1 TAP 05-04-2012 £33 30 1 - 30
CUST1 TAP 01-04-2012 £29 20 31 - 99
CUST1 TAP 01-04-2012 £28 10 1 - 30
我试图将此列表限制为在LINQ中具有唯一日期和唯一数量的行。 我想删除具有较高优先级的项目,留下具有唯一日期和数量的行。
我使用group by
和Max
尝试了多个order by
,但未能获得结果。
有没有办法通过linq做到这一点?
修改
管理将brad-rem的答案转换为VB.net。
下面的语法,如果有人需要它:
returnlist = (From p In returnlist
Order By p.Qty Ascending, p.Priority
Group By AllGrp = p.Date, p.Qty Into g = Group
Select g.First).ToList
答案 0 :(得分:1)
以下内容如何?它按日期和数量进行分组并对其进行排序,以便优先级较低。然后,它只选择每个组中的第一个项目,这些项目都是优先级较低的项目:
var result = from d in dbData
orderby d.Priority
group d by new
{
d.Date,
d.Qty
} into group1
select group1.First();