2012-02-23 6 views
4

私はLinqのプロではありませんが、理解しようとしています。 C#のこれをC#Linqで書くには

薄暗いX = db.YourClassでPから_

p.fl1 = CN1とCN2 p.f12 =

選択_中(VBで書かれた)このコードの記述方法

SUM1 = x.Sum(関数(Y)y.fl1)、_

SUM2 = x.Sum(関数(Y)y.fl2)、_

SUM3 = x.Sum( Functio N(Y)y.fl3)私が達成しようとしています何

はこれです、

選択合計(FL1)、合計(FL2)、合計(FL3)

FL1 = CN1とFL2 = CN2

The above sample found here

答えて

2
var x = from p in db.YourClass 
     where p.fl1 == cn1 && p.f12 == cn2 
     select p; 

    var sum1 = x.Sum(y=>y.fl1), 

    var sum2 = x.Sum(y=>y.fl2), 

    var sum3 = x.Sum(y=>y.fl3) 

編集:私は、これは、高速に動作することができると思う1つのクエリで

あなたはラムダ式を使用することができます
var x = (from p in db.YourClass 

     select new 
     { 
     s1 = db.YourClass.Where(y=> y.fl1 == cn1 && y.f12 == cn2).Sum(y=>y.fl1), 
     s2 = db.YourClass.Where(y=> y.fl1 == cn1 && y.f12 == cn2).Sum(y=>y.fl2), 
     s3 = db.YourClass.Where(y=> y.fl1 == cn1 && y.f12 == cn2).Sum(y=>y.fl3) 
     }).First(); 

int sum1 = x.s1, sum2 = x.s2, sum3 = x.s3; 
+0

? – Jan

+0

@Jan、編集されました、一見して私は 'p'または利用可能なものだと思います。 –

+0

しかし、この問題は、テーブルが巨大な場合、条件に基づいてすべてのデータが取得されます。私はすべてを最初に取得するのではなく、サーバー側で合計を行い、その合計を行いたいと思っていました。 – Dilberted

4
var x = 
    from p in db.YourClass 
    where p.fl1 == cn1 && p.fl2 == cn2 
    select p; 


var sum1 = x.Sum(y => t.fl1); 
var sum2 = x.Sum(y => t.fl2); 
var sum3 = x.Sum(y => t.fl3); 
1

、あなたはそれがちょうど定義されている文の中のxにアクセスするにはどうすればよい

public class Sums 
{ 
    public int Sum1{get;set;} 
    public int Sum2{get;set;} 
    public int Sum3{get;set;} 
} 

var list = db.YourClass.Where(x=>x.fl1==cn1 && x.f12==cn2).Select(y => 
           new Sums{ 
            Sum1 = y.Sum(z=>z.fl1), 
            Sum2 = y.Sum(z=>z.fl2), 
            Sum3 = y.Sum(z=>z.fl3) 
           }).ToList(); 
+0

この説明はお役に立ちましたか?すべてのデータを取得します。 –

+0

からは、yはデータベーステーブルのプロパティを出力するため、Sumの関数はありません。 – Dilberted

関連する問題