Sql LINQ不包含';工会';
此linq查询显示的错误不包含“union”的定义有什么问题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
(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()
不会解决这个问题:它有相同的(明显的)限制,即两侧的类型必须兼容
在修复命名或键入问题之后,我建议您考虑切换到
将调用所有对象上的.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()
不会解决这个问题:它有相同的(明显的)限制,即两侧的类型必须兼容
在修复命名或键入问题之后,我建议您考虑切换到
将调用所有对象上的.Union()
,以消除重复,但这是毫无意义的,因为独立创建的两个匿名对象永远不会是同一个对象(即使它们的内容相同).Equals()
或者,如果您的具体意图是消除重复,那么您需要创建一个类来保存数据,并以合理的方式实现
.Equals()
。LINQ不是SQL的替代品。首先不要写这样的代码。LINQ是ORM之上的查询语言。这个查询与对象和关系无关。@PanagiotisKanavos这是真的,但是如何解决这个错误呢?我认为这个查询中没有错误,但为什么它会显示这个错误呢?转换到ToList().Union(等…)firstLINQ并不能代替SQL。首先不要写这样的代码。LINQ是ORM之上的查询语言。这个查询与对象和关系无关。@PanagiotisKanavos这是真的,但是如何解决这个错误呢?我认为这个查询中没有错误,但是为什么它会显示这个错误呢?首先转换到ToList().Union(等等)。当这会产生不同的结果时,为什么要这样做?Concat不是一个Union,在SQL和Linq中都不是。当它产生不同的结果时,为什么要这样做呢?Concat不是联合,在SQL和Linq中都不是。