这个SQL可以在LINQ中完成吗?



我有一个简单的SQL查询,但我努力在LINQ复制

select top 1 * from tbl_CarTax tax
ORDER BY ABS(tax.C02_From - 286.0)

我已经在下面尝试了,但我得到了错误…LINQ to Entities不能识别'Int32 ToInt32(System.Object)'方法,这个方法不能被转换成store表达式

TaxCost = (from tax in db.DB2011_Vehicle_CarTax
orderby Math.Abs(Convert.ToInt32(C02Level - tax.C02_From))
select tax).SingleOrDefault();

任何帮助都是最受欢迎的

Truegilly

不需要Convert.ToInt。另外,FirstOrDefault相当于top 1SingleOrDefault将抛出一个异常,如果您的查询结果在多个行被返回。
尝试使用以下代码:

TaxCost = (from tax in db.DB2011_Vehicle_CarTax
           orderby Math.Abs(C02Level - tax.C02_From)
           select tax).FirstOrDefault();

与其他答案相反,我认为没有必要避免使用Math.Abs,因为实体框架知道这个方法,可以将其转换为SQL。

您可以拉下所有数据,然后使用Math。录制腹肌(如果有很多信息要拉下,可能会很慢),或者你可以这样做:

(from tax in db.DB2011_Vehicle_CarTax
 let level = C02Level - tax.C02_From
 let abs = (level < 0) ? (level * -1) : level
 orderby abs
 select tax).SingleOrDefault();

可能有一种更合法的方法来做这件事,但如果这足够快,它应该可以工作。

编辑 -实际上,似乎数学。Abs可以很好地转换为SQL。如果您删除Convert。

相关内容

  • 没有找到相关文章

最新更新