0

次のSQLクエリステートメントに相当するlinqまたはラムダ式を作成するのが不思議です:

select(sum(a.credit) - sum(a.debit)) as total 
from table_A a inner join table_B b on 
a.accountid = b.id 
where a.[date] >= '2013-01-01' 
and a.[date] < '2013-03-27' 
and b.Name = 'MKBank'

どんな助けでも大歓迎です。

4

2 に答える 2

0

これはうまくいくはずです:

            var qr = from a in lA
                 join b in lB on a.Id equals b.Id
                 where a.Date >= new DateTime(2013, 1, 1) &&
                 a.Date < new DateTime(2013, 3, 7) &&
                 b.Name == "MKBank"
                 select new
                 {
                     cr = a.credit,
                     db = a.debit
                 };

        var res = qr.Sum((x) => x.cr - x.db);
于 2013-03-26T23:03:40.100 に答える
0

表示されているエラーは、最終選択で匿名型を宣言する方法が原因です。選択するプロパティ名以外を指定する場合は、メンバー名を指定する必要があります。詳細については、匿名型 (C# プログラミング ガイド)を参照してください。

クエリには他にもいくつかの問題があります。DateTimeまた、値を比較することもできないためstring、クエリに渡す前に日付パラメーターを作成する必要があります。1 つのアカウントの合計だけが必要な場合は、何.GroupByもする必要はありません。.Select最後o => o.o.credit - o => o.o.debitにコンパイルされません。あなたが欲しいのは だと思いますo => o.o.credit - o.o.debit

代わりにこれを試してください:

DateTime beginDate = ...
DateTime endDate = ...
p = db.Account_Transaction.Join(
        db.Accounts,
        o => o.AccountId, 
        p => p.ID,
        (o, p) => new { o, p })
    .‌Where(o => o.o.Date >= beginDate && o.o.Date < endDate && o.p.Name == "MKBank")
    .Sum(o => o.o.credit - o.o.debit); 
于 2013-03-27T00:52:15.740 に答える