Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这个SQL可以在LINQ中完成吗?_C#_Sql_Linq_.net 4.0 - Fatal编程技术网

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

C# 这个SQL可以在LINQ中完成吗?,c#,sql,linq,.net-4.0,C#,Sql,Linq,.net 4.0,我有一个简单的SQL查询,但我很难在LINQ中进行复制 select top 1 * from tbl_CarTax tax ORDER BY ABS(tax.C02_From - 286.0) 我在下面尝试了这个,但我得到了错误…-LINQ to Entities无法识别方法“Int32到Int32(System.Object)”方法,并且无法将此方法转换为存储表达式 TaxCost = (from tax in db.DB2011_Vehicle_CarTax orderby Math.A

我有一个简单的SQL查询,但我很难在LINQ中进行复制

select top 1 * from tbl_CarTax tax
ORDER BY ABS(tax.C02_From - 286.0)
我在下面尝试了这个,但我得到了错误…-LINQ to Entities无法识别方法“Int32到Int32(System.Object)”方法,并且无法将此方法转换为存储表达式

TaxCost = (from tax in db.DB2011_Vehicle_CarTax
orderby Math.Abs(Convert.ToInt32(C02Level - tax.C02_From))
select tax).SingleOrDefault();
任何帮助都是非常感激的


Truegilly

您可以下拉所有数据,然后在记录集上使用Math.Abs(如果有很多信息要下拉,可能会变慢),或者您可以执行以下操作:

(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();
(来自db.DB2011\u Vehicle\u CarTax中的税收)
let level=C02 level-tax.C02_From
设abs=(级别<0)?(级别*-1):级别
orderby abs
选择tax).SingleOrDefault();
也许有一种更合理的方法可以做到这一点,但如果这足够快,它应该会起作用


编辑-实际上,Math.Abs似乎可以很好地转换为SQL。如果删除Convert.Int32,它应该可以正常工作。

不需要
Convert.ToInt
。此外,
FirstOrDefault
相当于
top 1
<如果查询结果返回多行,则code>SingleOrDefault将引发异常。
尝试使用以下代码:

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

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

属性中的C02Level和tax.C02_的类型是什么?
C02Level
tax.C02_表单
的数据类型是什么?您可能有数据类型转换问题。C02Level是double,tax.C02_From是int:)您是否使用实体框架?如果他确实需要丢弃小数,可以调用
Math.Floor
,它在LINQ上也可以很好地转换为EF。刚刚验证的LINQ to Entities将Math.Abs转换为此transact-sql函数:Abs()