此linq查询有什么问题,该错误向我显示错误“不包含'联合'的定义
(from rev in db.vM29s
where Years.Contains(rev.FinancialYear) && rev.Exclude=="No"
group rev by new { rev.RevenueCode, rev.FinancialYear } into g
select new
{
Revenuecode = g.Key.RevenueCode,
totalRevenue = g.Sum(x => x.RevenueAmount),
RevenueEnglish = (from a in db.RevenueCodes where a._RevenueCode == g.Key.RevenueCode select a.RevenueEng).FirstOrDefault(),
// MinorCode = (from a in db.MinorCodes where a._MinorCode == g.Key.MinorCode select a.MinorEng),
RevenueDari = (from a in db.RevenueCodes where a._RevenueCode == g.Key.RevenueCode select a.RevenueDari).FirstOrDefault(),
Yearss = g.Key.FinancialYear
}).Union(from u in db.rtastable
where Years.Contains(u.Year)
group u by new { u.objectcode, u.Year } into g
select new
{
Revenuecode = g.Key.objectcode,
totalRevenue = g.Sum(x => x.amount),
RevenueEnglish = (from a in db.RevenueCodes where a._RevenueCode == g.Key.objectcode select a.RevenueEng).FirstOrDefault(),
// MinorCode = (from a in db.MinorCodes where a._MinorCode == g.Key.MinorCode select a.MinorEng),
RevenueDari = (from a in db.RevenueCodes where a._RevenueCode == g.Key.objectcode select a.RevenueDari).FirstOrDefault(),
Yearss = g.Key.Year
}).ToList();
答案 0 :(得分:1)
答案 1 :(得分:1)
如果同时包含using System.Linq;
和这两个匿名类型具有相同的属性名称和属性类型,则您所做的应该有效。
但是它不起作用。解决方案是检查您的匿名类型,以检查(a)细微的商品名称差异和(b)细微的商品名称差异。
例如甚至int
与smallint
或double
或decimal
也会导致此构建错误:
'System.Collections.Generic.IEnumerable'不包含'Union'的定义,最佳扩展方法重载'System.Linq.Queryable.Union(System.Linq.IQueryable,System.Collections.Generic.IEnumerable) '有一些无效的参数
切换到.Concat()
不能解决此问题:它具有相同(明显)的限制,即双方类型必须兼容。
解决命名或键入问题后,建议您考虑切换到.Concat()
。原因:.Union()
将在所有对象上调用.Equals()
以消除重复,但这是没有意义的,因为没有两个独立创建的匿名对象将是同一对象(即使它们的内容是相同的) )。
或者,如果您要消除重复是您的特定意图,那么您需要创建一个用于保存数据并以合理的方式实现.Equals()
的类。