2016-04-27 16 views
0

Ich habe ein Problem mit LINQ zu Entities. Ich wähle Datensätze aus der Datenbank aus, gruppiere sie und ordne sie anschließend per absteigender ID an. Dann möchte ich Erstes Element auswählen, aber nur wenn Menge! = 0. Ich denke, weil ich FirstOrDefault verwenden muss, bekomme ich falsche Ergebnisse, bin mir aber nicht sicher, wie ich es korrigieren soll.LINQ zu Entities GroupBy, OrderByDescending, FirstOrDefault, wenn

DB

enter image description here

Nun ist diese Abfrage wird mir ID geben die 2 und 1 gruppiert und 4 "gruppiert". Was ich brauche, ist FIRST Items nur auszuwählen, wenn Quantity! = 0 ist und ich nicht sicher bin, wie ich das bekommen soll.

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); 

Wenn WarehouseID 1 ist, muss ich nur Zeile mit ID 4 zurück erhalten. Jede Hilfe wird geschätzt.

Edit: Zuerst muss ich GroupBy ItemCode, dann habe ich zwei Gruppen für meinen Fall oben. Das sind 1 und 2 für die erste Gruppe und 4 für die zweite Gruppe. Dann ordne ich sie per Id absteigend und ich bekomme (2, 1), (4). Dann muss ich zuerst aus der Gruppe auswählen, aber nur, wenn die Menge ist! = 0. Wenn die Menge Null ist, möchte ich nichts aus einer Gruppe auswählen.

Bild zu klären, was ich brauche. Ich bin fest auf den letzten Schritt zu FristFrom jede Gruppe nur wenn Quantität = 0

enter image description here

Antwort

0

EDIT: Das ist, was Sie tun möchten:

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

Zuerst muss ich groupBy ItemCode Dann habe ich zwei Gruppen für meinen Fall oben. Das sind 1 und 2 für die erste Gruppe und 4 für die zweite Gruppe. Dann ordne ich sie per Id absteigend und ich bekomme (2, 1), (4). Dann muss ich zuerst wählen, aber nur, wenn die Menge ist! = 0. Wenn Menge Null ist, möchte ich nichts aus einer Gruppe auswählen. –

+0

In Ihrem zweiten Fall erhalten Sie nur die IDs 1 und 4, wenn Sie 2 und 4 erhalten sollen, sehen Sie, dass 2 die Menge 0 hat und ignorieren Sie sie, so dass Sie am Ende nur 4 übrig haben. –