sql - 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();
解决方案
如果您包含using System.Linq;
并且两个匿名类型都具有完全相同的属性名称 + 属性类型,那么您所做的应该可以工作。
然而它不起作用。解决方案是检查您的匿名类型是否有 (a) 细微的属性名称差异和 (b) 细微的属性类型差异。
例如,即使是int
vs a smallint
or double
ordecimal
也会导致此构建错误:
“System.Collections.Generic.IEnumerable”不包含“Union”的定义,最好的扩展方法重载“System.Linq.Queryable.Union(System.Linq.IQueryable, System.Collections.Generic.IEnumerable)”有一些无效参数
切换到.Concat()
不会解决这个问题:它具有相同(明显)的限制,即双方的类型必须兼容。
解决命名或键入问题后,我建议您考虑切换到.Concat()
. 原因:.Union()
将调用.Equals()
所有对象来消除重复,但这是没有意义的,因为没有两个独立创建的匿名对象将永远是同一个对象(即使它们的内容相同)。
或者,如果您的特定意图是消除重复,那么您需要创建一个类来保存您的数据并以.Equals()
有意义的方式实现。
推荐阅读
- react-native - 来自 API 的 React Native 获取请求冻结 UI
- python - 是否不鼓励从 Python 脚本调用 Windows 命令行?
- angular - 如何在 fa-icon(角度)上获取 event.target.id?
- reactjs - 使用 Jest 模拟 React 的 AJAX 请求
- ios - Flutter - 在 IOS 上使用 FCM 的后台通知
- delphi - Microsoft OAuth 登录布局错误
- java - 多租户 - 租户的运行时创建
- excel - 如何在 VBA 的列表框中使用值?
- java - 为什么 Java 不能推断超类型?
- bash - 为什么我的 bash 脚本中不断出现语法错误?它是否与“:”有关?