2016-04-27 143 views
0

我对LINQ to Entities有以下问题。我从DB中选择记录,将它们分组,然后按Id降序排列。然后,我想选择第一项,但只有当数量是!= 0时。我想因为我必须使用FirstOrDefault,我得到错误的结果,但不知道如何纠正它。LINQ to Entities GroupBy,OrderByDescending,FirstOrDefault

DB

enter image description here

现在,这个查询会给我ID的2和1编组和4 “分组”。我需要的是仅在Quantity =!= 0的情况下选择FIRST项目,但我不确定如何获取。

data = DbContext.Items.Where(x.WarehouseId == 1) 
       .GroupBy(x => x.ItemCode, (key, g) => g.OrderByDescending(y => y.Id).FirstOrDefault()) 
       .OrderBy(parameters.SortExpression) 
       .Skip(parameters.Start) 
       .Take(parameters.Length); 

如果WarehouseID是1,我只需要获取ID为4的行。任何帮助表示赞赏。

编辑:首先我需要groupBy ItemCode,然后我将有两个组为我的情况。第一组为1和2,第二组为4。然后我通过Id降序来订购它们,我得到(2,1),(4)。然后我需要从组中选择第一个,但只有当数量是!= 0时。如果数量为零,我不想从组中选择任何内容。

图片来澄清我需要什么。我卡上的最后一步采取FristFrom每个组只有数量= 0

enter image description here

回答

0

编辑:这就是你想要做什么:

var data = DbContext.Items 
      .Where(p => p.WarehouseId == 1) 
      .GroupBy(p => p.ItemCode, (key, items) => new { Key = key, Items = items, ItemsCountWithQuantityZero = items.Where(p => p.Quantity == 0).Count() }) 
      .Where(p => p.ItemsCountWithQuantityZero == 0) 
      .Select(p => p.Items.OrderByDescending(q => q.Id).First()); 
+0

首先我需要GROUPBY ItemCode ,那么我会为上面的情况设置两个组。第一组为1和2,第二组为4。然后我通过Id降序来订购它们,我得到(2,1),(4)。然后我需要首先选择,但只有当数量是!= 0时。如果数量为零,我不想从组中选择任何东西。 –

+0

在你的第二种情况下,当你得到2和4时,你只能得到Ids 1和4,看到2有数量0并且忽略它,所以你最后只剩下4。 –