Lambda查询需要推断类型
本文关键字:类型 查询 Lambda | 更新日期: 2023-09-27 18:29:29
我正在尝试运行我继承的一些代码。它使用lambda表达式来返回一些发票和各种不同的计算值。代码如下。问题代码是:
var queryable = from i in this.db.Invoices
join j in this.db.JobBooks on i.JobBook_ID equals (int?) j.Job_Book_ID into j
where (i.Month == month) && (i.Year == year)
select new {
inv = i,
job = j
};
return new AccountsTotal {
TotalActuals = Queryable.Sum(queryable, i => i.inv.Month_Value),
TotalForecasts = Queryable.Sum(queryable, i => i.inv.Month_Forecast_Billing),
TotalCredits = Queryable.Sum(queryable, i => i.inv.Credits),
TotalInvoiced = Queryable.Sum(from i in queryable
where (i.inv.Month_Value >= 0M) && ((i.inv.Month_Invoice_Number != null) && (i.inv.Month_Invoice_Number != ""))
select i, i => i.inv.Month_Value),
ISActuals =Queryable.Sum(from i in queryable
where i.job.Business_Unit == 0
select i, i => i.inv.Month_Value),
ISForecasts = Queryable.Sum(from i in queryable
where i.job.Business_Unit == 0
select i, i => i.inv.Month_Forecast_Billing),
ISCredits = Queryable.Sum(from i in queryable
where i.job.Business_Unit == 0
select i, i => i.inv.Credits),
ICActuals = Queryable.Sum(from i in queryable
where i.job.Business_Unit == 1
select i, i => i.inv.Month_Value),
ICForecasts = Queryable.Sum(from i in queryable
where i.job.Business_Unit == 1
select i, i => i.inv.Month_Forecast_Billing),
ICCredits = Queryable.Sum(from i in queryable
where i.job.Business_Unit == 1
select i, i => i.inv.Credits)
};
在返回总数的部分,一切都很好,直到以"ISActual=Queryable…"开头的行
Queryable.Sum有一个错误,消息中说明了方法Queryable.Som的类型方法无法推断。我应该隐式地指定类型。我不确定在哪里,也不知道在哪里尝试过,但都失败了。它应该是一个小数。
下一行[I.job.Business_unit]说没有Business_unit的定义。如果我在过程的顶部声明了一个变量,但类型为job,那么它就会识别类和属性Business_Unit。
如果有人能帮上忙,那就太棒了。
两个问题一个答案,但两个问题都解决了。我无法解释为什么或如何解决可查询问题,但事实是:我第一次发布这个问题是在我开发VS2012时,Tom您的选角解决方案是我尝试过的,但没有成功,尽管我认为它是正确的。然后,我把代码带到一台运行VS2015的机器上,我尝试在那里毫无乐趣地铸造它。然后我在没有石膏的情况下进行了另一次清理和重建,问题就消失了。回到2012年的代码,问题仍然没有了。我无法解释为什么。。
另一个问题,可枚举问题,通过将变量j强制转换为类类型作业来解决。
select new {
inv = i,
job = (JobBook)j
};
奇怪的是为什么发票不需要石膏。我想这些都是从以前编译的程序集和反编译器创建程序集的结果。我试过Telerik,ILSpy,最后是Reflector。最后决定了。IT人员和前一位带着所有代码离开的开发人员需要一句强有力的话。。。
谢谢你们的帮助。。。