2011-02-08 75 views
2

我困在LINQ查詢中。基本上我有兩個表通過關聯在uniqueID鍵上。一張表包含看起來重複的東西(tblDupes),另一張表是事實表(tblVouchers)。在下面的查詢中,我的'總和'正在工作,但FirstorDefault沒有。它返回一個錯誤'不能隱式地將類型'字符串'轉換爲'bool'。LINQ FirstOrDefault問題

var dupeGroups = from d in db.tblDupes 
          group d by d.dupeGroup into g 
          select new 
          { 
           Group = g.Key, 
           TotalVal = g.Sum(v => v.tblVoucher.TransactionAmtDecimal), 
           Vendor = g.FirstOrDefault(x => x.tblVoucher.vendorName) 
          }; 

任何想法?我已經嘗試了FirstOrDefault的許多不同排列,並將它放在末尾,等等。我也嘗試過First()。

謝謝!

回答

2

我認爲FirstOrDefault的參數是一個用於過濾的謂詞。你要選擇你要檢索第一場,然後搶在第一個結果(記錯)是這樣的:

var dupeGroups = from d in db.tblDupes 
       group d by d.dupeGroup into g 
       select new { 
        Group = g.Key, 
        TotalVal = g.Sum(v => v.tblVoucher.TransactionAmtDecimal), 
        Vendor = g.Select(x => x.tblVoucher.vendorName).FirstOrDefault() 
       }; 

希望這有助於!

+0

這是完美的!可以發誓我嘗試過。非常感激。我一直在做linq一段時間,真的很希望能夠'現在'更多的細節現在:) – Glinkot 2011-02-08 01:45:08

3

FirstOrDefault需要一個謂詞,意思是Func<T, bool>。但是,由於vendorName是一個字符串,因此您正在通過x => x.tblVoucher.vendorName,Func<T, string>bool結果是指示匹配的第一行。例如,要查找vendorName等於「foo」的第一行,您可以傳入x => x.tblVoucher.vendorName == "foo"

+0

感謝那個柯克,很好的解釋。 – Glinkot 2011-02-08 01:46:15