我被困在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()。
谢谢!
答案 0 :(得分:3)
FirstOrDefault
采用谓词,即Func<T, bool>
。但是,您传递了x => x.tblVoucher.vendorName
,Func<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()
};
希望这有帮助!