2016-04-27 136 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。 –