2016-04-27 22 views
0

LINQ to Entitiesに次の問題があります。私はDBからレコードを選択し、それらをグループ化して、IDの降順でレコードを注文しています。最初の項目を選択したいのですが、Quantityが!= 0の場合のみです。私はFirstOrDefaultを使用しなければならないので、間違った結果を得ていますが、それを修正する方法がわかりません。LINQ to Entities GroupBy、OrderByDescending、FirstOrDefault

enter image description here

DBは今、このクエリは、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にする必要があります、私は上記のケースの2つのグループを持っています。第1グループは1と2、第2グループは4です。それから、私はそれらを降順で降順で注文し、(2、1)、(4)を得る。グループから最初に選択する必要がありますが、Quantityが!= 0の場合にのみ選択します。Quantityがゼロの場合、グループから何も選択したくありません。

私が必要とするものを明確にするためのイメージ。私は、最後のステップにこだわっている量は= 0

enter image description here

答えて

0

EDITである場合にのみFristFrom各グループを取る:!これはあなたが何をしたいのか、次のとおりです。

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に必要、私は上記の私の場合の2つのグループを持っています。第1グループは1と2、第2グループは4です。それから、私はそれらを降順で降順で注文し、(2、1)、(4)を得る。それから、最初に選択する必要がありますが、Quantityが!= 0の場合のみです。Quantityがゼロの場合、グループから何も選択したくありません。 –

+0

2番目と4番目の場合はID 1と4しか得られません。2は数量0で無視されますので、最後に4を残してください。 –