Linq - 根据单个字段的值(最小值)将每个唯一值的列表限制为1行

时间:2012-05-03 16:37:41

标签: sql-server vb.net linq

我有一个存储过程(我无法编辑),我通过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 byMax尝试了多个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

1 个答案:

答案 0 :(得分:1)

以下内容如何?它按日期和数量进行分组并对其进行排序,以便优先级较低。然后,它只选择每个组中的第一个项目,这些项目都是优先级较低的项目:

var result = from d in dbData
orderby d.Priority 
group d by new
{
    d.Date,
    d.Qty
} into group1
select group1.First();