LINQ FirstOrDefault问题

时间:2011-02-08 01:33:45

标签: linq linq-to-sql

我被困在LINQ查询上。基本上我有两个表通过关联在唯一ID键上链接。一个表包含看起来重复的内容(tblDupes),另一个表是事实表(tblVouchers)。在下面的查询中,我的'sum'正在工作,但FirstorDefault没有。它返回一个错误'无法将类型'字符串'隐式转换为'bool'。

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 个答案:

答案 0 :(得分:3)

FirstOrDefault采用谓词,即Func<T, bool>。但是,您传递了x => x.tblVoucher.vendorNameFunc<T, string>,因为vendorName是一个字符串。 bool结果表示匹配的第一行。例如,要查找vendorName等于&#34; foo&#34;的第一行,您可以传入x => x.tblVoucher.vendorName == "foo"

答案 1 :(得分:2)

我认为FirstOrDefault的参数是用于过滤的谓词。您想先选择要检索的字段,然后抓住第一个结果(methinks),如下所示:

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()
                 };

希望这有帮助!