2016-05-09 14 views
0

enter image description hereEntity Frameworkを使用してSQLテーブルから2つの列値の合計を取得する方法は?

私は上記のスクリーンショットでテーブル名GRNDtlReturnを持っています。私はReturnQuantityと表の1行目と3行目の合計を取得したい。私はいくつかのコードを書いたが、それは完全なReturnQuantityの列の合計を返します。これを解決するために私を助けてください。私はigrndtlreturnRepository.GetList(x => x.GRNNo == grnno && x.ProductCode == productcode)フィルタ式に従ってIQueryable<GRNDtlReturn>を返すことを前提としてい

public IList<GRNDtlReturnModel> GetReturnSum() 
{ 
    return igrndtlreturnRepository.GetList (x=> x.GRNNo == "GRN00022" && x.ProductCode == "D/F/HL/DM/0003/C/002") 
      .Select(y => new GRNDtlReturnModel 
      { 
       GRNNo = y.GRNNo, 
       totalQuantity = context.GRNDtlReturns.Sum(p => p.ReturnQuantity) 
      }).ToList(); 
} 
+0

なぜ、第1行と第3行を使いたいのですか? GRNNo&GRNDtlReturnsテーブルとの関係はありますか? –

+0

1行目と3行目GRNNoとProductCodeは同じですが、同じGrNNoとProductCodeでReturnQuantityの合計を取る必要があります。 – Rasika

+0

返されたリスト、または返されたリストの最初の項目だけが必要なのでしょうか? 2番目のケースでは、現在のものとは異なる、おそらくより良い答えが可能になります。 – grek40

答えて

0
public IList<GRNDtlReturnModel> GetReturnSum() 
{ 
     return igrndtlreturnRepository.GetList(x=> x.GRNNo == "GRN00022" && 
               x.ProductCode == "D/F/HL/DM/0003/C/002") 
      .Select(y => new GRNDtlReturnModel 
      { 
       GRNNo = y.GRNNo, 

       totalQuantity = context.GRNDtlReturns. 
           Where(t=> t.GRNNo==y.GRNNo).Sum(p => p.ReturnQuantity) 

      }).ToList(); 
} 
+0

このコードは動作しています、ありがとうございました。 – Rasika

+0

承認済みとしてマークしてください –

0

は、ここに私のコードです。

ケース1:この場合GRNNo = "GRN00022"ProductCode = "D/F/HL/DM/0003/C/002"

ための単一の結果を取得し、GetListの結果は既に関連するエントリに制限され、任意の行が条件に一致する場合、単一の結果GRNDtlReturnModelがあるべきです。

GRNDtlReturnModel result = igrndtlreturnRepository.GetList(x => x.GRNNo == "GRN00022" && x.ProductCode == "D/F/HL/DM/0003/C/002") 
    .GroupBy(x => x.GRNNo, (k, v) => new GRNDtlReturnModel { GRNNo = k, totalQuantity = v.Sum(q => q.ReturnQuantity) }) 
    .FirstOrDefault(); 

ケース2:この場合GRNNoProductCode

の一致するすべての組み合わせに対して、グループの和を取得するには、グループ化式は、関連するすべてのグループキーが含まれている必要があり、合計の計算は同じままです。

IList<GRNDtlReturnModel> result = igrndtlreturnRepository.GetList(x => true) 
    .GroupBy(x => new { x.GRNNo, x.ProductCode }, (k, v) => new GRNDtlReturnModel { GRNNo = k.GRNNo, totalQuantity = v.Sum(q => q.ReturnQuantity) }) 
    .ToList(); 

これは、context.GRNDtlReturnsへのネストされたアクセスよりも効率的でなければなりません。

関連する問題