asp.net LINQ不包含“union”的定义

f2uvfpb9  于 2023-02-10  发布在  .NET
关注(0)|答案(2)|浏览(194)

这个linq查询有什么问题,它显示了不包含'union'的定义的错误

(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();
9jyewag0

9jyewag01#

如果您包含了using System.Linq; * 和 *,则两个匿名类型都具有完全相同的属性名称+属性类型,那么您所做的应该会起作用。
解决办法是检查匿名类型是否存在细微的属性名称差异和/或细微的属性类型差异
例如,即使intsmallintdoubledecimal相比也会导致此构建错误:
“System.Collections.Generic.IEnumerable〈AnonymousType#1〉"不包含”Union“的定义,并且最佳扩展方法重载”System.Linq.Queryable.Union(System.Linq.IQueryable,System.Collections.Generic.IEnumerable)“具有一些无效参数
切换到.Concat()不会修复此问题:它具有相同的(明显的)限制,即两侧的类型必须兼容。
在您解决了命名或键入问题之后,我建议您考虑切换到.Concat().Union()将在所有对象上调用.Equals()以消除重复项,但这毫无意义,因为独立创建的两个匿名对象永远不会是同一个对象(即使它们的内容相同)。
如果消除重复项是您的“特定意图”,那么您需要创建一个类来保存您的数据,并以一种有意义的方式实现.Equals()

xesrikrc

xesrikrc2#

如果数据已在内存中,则应使用Concat或addRange

相关问题