LINQ不包含“联合”的定义

时间:2018-11-12 10:37:05

标签: sql asp.net asp.net-mvc entity-framework linq

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

2 个答案:

答案 0 :(得分:1)

如果数据已全部存储在内存中,则应使用ConcataddRange

答案 1 :(得分:1)

如果同时包含using System.Linq;这两个匿名类型具有相同的属性名称和属性类型,则您所做的应该有效。

但是它不起作用。解决方案是检查您的匿名类型,以检查(a)细微的商品名称差异和(b)细微的商品名称差异

例如甚至intsmallintdoubledecimal也会导致此构建错误:

  

'System.Collections.Generic.IEnumerable'不包含'Union'的定义,最佳扩展方法重载'System.Linq.Queryable.Union(System.Linq.IQueryable,System.Collections.Generic.IEnumerable) '有一些无效的参数

切换到.Concat()不能解决此问题:它具有相同(明显)的限制,即双方类型必须兼容。

解决命名或键入问题后,建议您考虑切换到.Concat()。原因:.Union()将在所有对象上调用.Equals()以消除重复,但这是没有意义的,因为没有两个独立创建的匿名对象将是同一对象(即使它们的内容是相同的) )。

或者,如果您要消除重复是您的特定意图,那么您需要创建一个用于保存数据并以合理的方式实现.Equals()的类。