Sql LINQ不包含';工会';

Sql LINQ不包含';工会';,sql,asp.net,asp.net-mvc,entity-framework,linq,Sql,Asp.net,Asp.net Mvc,Entity Framework,Linq,此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

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

如果数据在内存中已准备就绪,则应使用或使用。

如果数据在内存中已准备就绪,则应使用或使用。

如果包括
使用System.Linq
和这两个匿名类型都具有完全相同的属性名和属性类型,那么您所做的应该是有效的

但它并不奏效。解决方案是检查匿名类型是否存在(a)细微的属性名称差异,以及(b)细微的属性类型差异

例如,与
smallint
double
decimal
相比,即使是
int
也会导致此生成错误:

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

切换到
.Concat()
不会解决这个问题:它有相同的(明显的)限制,即两侧的类型必须兼容

在修复命名或键入问题之后,我建议您考虑切换到> COUNTATE()/<代码>。原因:

.Union()
将调用所有对象上的
.Equals()
,以消除重复,但这是毫无意义的,因为独立创建的两个匿名对象永远不会是同一个对象(即使它们的内容相同)


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

如果您使用System.Linq包含
和这两个匿名类型都具有完全相同的属性名和属性类型,那么您所做的应该是有效的

但它并不奏效。解决方案是检查匿名类型是否存在(a)细微的属性名称差异,以及(b)细微的属性类型差异

例如,与
smallint
double
decimal
相比,即使是
int
也会导致此生成错误:

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

切换到
.Concat()
不会解决这个问题:它有相同的(明显的)限制,即两侧的类型必须兼容

在修复命名或键入问题之后,我建议您考虑切换到> COUNTATE()/<代码>。原因:

.Union()
将调用所有对象上的
.Equals()
,以消除重复,但这是毫无意义的,因为独立创建的两个匿名对象永远不会是同一个对象(即使它们的内容相同)


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

LINQ不是SQL的替代品。首先不要写这样的代码。LINQ是ORM之上的查询语言。这个查询与对象和关系无关。@PanagiotisKanavos这是真的,但是如何解决这个错误呢?我认为这个查询中没有错误,但为什么它会显示这个错误呢?转换到ToList().Union(等…)firstLINQ并不能代替SQL。首先不要写这样的代码。LINQ是ORM之上的查询语言。这个查询与对象和关系无关。@PanagiotisKanavos这是真的,但是如何解决这个错误呢?我认为这个查询中没有错误,但是为什么它会显示这个错误呢?首先转换到ToList().Union(等等)。当这会产生不同的结果时,为什么要这样做?Concat不是一个Union,在SQL和Linq中都不是。当它产生不同的结果时,为什么要这样做呢?Concat不是联合,在SQL和Linq中都不是。