Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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# 为什么十进制字段的LINQ字符串插值会生成错误的SQL?_C#_.net_Linq To Sql - Fatal编程技术网

C# 为什么十进制字段的LINQ字符串插值会生成错误的SQL?

C# 为什么十进制字段的LINQ字符串插值会生成错误的SQL?,c#,.net,linq-to-sql,C#,.net,Linq To Sql,我想构建代码来迭代任何对象的属性,并基于具有有效值的字段在LINQ中构建动态where子句。我让它工作 但是,在下面的代码中,您将看到使用字符串插值的注释行,它们根本不起作用。注释解释了这一点,但检查生成的SQL是因为WHERE子句完全错误。这只发生在十进制字段中,简单字符串才有效 这并不是世界末日,但我会失眠,因为为什么林克会产生这个。有什么想法或帮助吗?多谢 // TODO: why does the string interpolation not work? // it outputs

我想构建代码来迭代任何对象的属性,并基于具有有效值的字段在LINQ中构建动态where子句。我让它工作

但是,在下面的代码中,您将看到使用字符串插值的注释行,它们根本不起作用。注释解释了这一点,但检查生成的SQL是因为WHERE子句完全错误。这只发生在十进制字段中,简单字符串才有效

这并不是世界末日,但我会失眠,因为为什么林克会产生这个。有什么想法或帮助吗?多谢

// TODO: why does the string interpolation not work?
// it outputs BudgetApproved.Equals(115500.00) which for some reason when query is 
// constructed becomes FROM [Tactic] AS [t] WHERE CAST(0 AS bit) = CAST(1 AS bit)

string whereClause = fieldName + " = " + fieldValue;
//string whereClause = string.Format("{0}.Equals({1})", fieldName, fieldValue);
//string whereClause = $"{fieldName}.Equals({fieldValue})";

query = query.Where(whereClause);
已更新

看起来@NetMage建议很有效,但很奇怪,因为在即时窗口中,两个输出似乎是相同的

?fieldName + ".Equals(" + fieldValue + ")";
"ExpenseCategoryItemId.Equals(1)"
?string.Format("{0}.Equals({1})", fieldName, fieldValue);
"ExpenseCategoryItemId.Equals(1)"

你能在上下文中显示对象和代码吗?嘿@NetMage。注释中的sql是由查询生成的sql,使用基于[link]的helper方法进行验证[我在sql profiler中验证了,当我使用字符串插值创建WHERE子句时,sql正在使用带位转换的WHERE子句,即使在Studio即时窗口中,
WHERE子句
对于所有三种情况都具有相同的字符串值。字符串插值与“简单字符串”不同。如果执行
fieldName,会发生什么情况+“.Equals(“+fieldValue+”)
作为简单字符串或
$”{fieldName}={fieldValue}”
作为插值字符串?您使用哪个版本/风格的动态LINQ来提供
Where(字符串)
?有趣…你的建议在@NetMage有效,但我不清楚原因。请参阅更新的帖子…无法在即时窗口的代码段注释中使用降价。在即时窗口中,它似乎生成相同的值,但当我将其馈送到
时,你的建议有效,而另一个则无效。Where
LINQ运算符。这是一个.net core 3.0项目,但对于此类i,导入了System.Linq.Dynamic.core组件v1.0.20