多個集合列,我想下面的SQL翻譯成LINQ:返回LINQ
SELECT
(Select count(BidID)) as TotalBidNum,
(Select sum(Amount)) as TotalBidVal
FROM Bids
我已經試過這樣:
from b in _dataContext.Bids
select new { TotalBidVal = b.Sum(p => p.Amount), TotalBidNum = b.Count(p => p.BidId) }
但得到一個錯誤「出價不包含定義爲「總和」,沒有擴展方法「總和」接受類型「投標」的第一個參數可以找到。
我該怎麼做LINQ?
感謝
,結論如下:
最終的答案是:
var ctx = _dataContext.Bids;
var itemsBid = (from b in _dataContext.Bids
select new { TotalBidVal = ctx.Sum(p => p.Amount), TotalBidNum = ctx.Count() }).First();
這確實解決了錯誤(儘管它似乎是不必要的步驟benfit - 這是爲什麼它需要?)。我的Count有一個問題(p => p.BidID) - p.BidID不是布爾值的錯誤。我用Count()替換它,現在查詢返回正確的總和和計數,但不是作爲單個行。一遍又一遍的同一行 - 我認爲很多次,因爲在投標表中有行。我怎樣才能返回像我原來的SQL查詢單行? – BKahuna
@BKahuna你的查詢說「從_dataContext.Bids中的b」這是一個迭代。即使你只是計算總和和計數,你也不會得到一個結果。您可以通過調用First()來結束lambda表達式。這會給你只有一個結果,就像我所做的一樣。 – scartag
@BKahuna請滾動我的答案到最後,看看我最後一次打電話。我調用First()方法,它將確保我只返回一行(生成的SQL是Top(1)) – scartag