2013-03-26 77 views
0

我只是想爲一個類似的LINQ或lambda表達式以下SQL查詢語句:SQL查詢中的LINQ或Lambda表達式

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' 

任何幫助表示讚賞。

+0

我試圖變種P = db.Account_Transaction.join(db.Accounts,O => o.AccountId,p值=> p.ID,(鄰,對)=> new {o,p})。其中(o => ooDate> ='2013-01-01'&& ooDate <'2013-03-31')。GroupBy(grp => new {grp.o.debit, grp.o.credit})。select(result => new {result.sum(o => oocredit-o => oodebit)});但我得到了一個像無效的匿名聲明等錯誤 – 2013-03-27 00:14:32

回答

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

感謝您的幫助,但我試過了,它似乎並沒有給我任何結果。 – 2013-03-27 00:13:41

0

你看到這個錯誤是因爲你是如何在聲明的最後選擇您的匿名類型。如果您想指定除屬性名稱以外的任何屬性名稱進行選擇,則需要指定一個成員名稱。閱讀Anonymous Types (C# Programming Guide)瞭解更多詳情。

您的查詢還有其他一些問題。您也無法比較DateTimestring值,因此您應該在將它們傳遞給查詢之前構造日期參數。如果您只想要一個帳戶的總數,則不需要執行任何.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);