为什么LINQ试图反正检查第二体现在哪里?
.Where(t => String.IsNullOrEmpty(someNullString) || t.SomeProperty >= Convert.ToDecimal(someNullstring))
什么是通常的解决办法?
更新:
它是关于LINQ to SQL的,当然。 它不能转换成SQL。
为什么LINQ试图反正检查第二体现在哪里?
.Where(t => String.IsNullOrEmpty(someNullString) || t.SomeProperty >= Convert.ToDecimal(someNullstring))
什么是通常的解决办法?
更新:
它是关于LINQ to SQL的,当然。 它不能转换成SQL。
在.Where
被在一个使用的Table<>
如果是这样,那么任何数据都可以抢下前,必须将LINQ转换为SQL要做到这一点,必须在转换string
成一个decimal
。 它不是要实际执行比较的是,它试图建立必要的检索数据的结构。
这是否帮助?
.Where(t => String.IsNullOrEmpty(someNullString) || (t.SomeProperty >= Convert.ToDecimal(someNullstring)))
注意到()周围的第二个条件? 我不认为它的工作原理,但总的来说,我喜欢把()周围的每一个条件在我的代码。 这样,编译器知道哪些部分属于一起的时候它编译代码,短路评估做准备......
我不能短路评价重现任何问题...
我觉得这个计算结果为类似:
[CompilerGenerated]
private static bool <MyMethod>b__f(MyObject t)
{
return (String.IsNullOrEmpty(someNullString)
|| t.SomeProperty >= Convert.ToDecimal(someNullstring));
}
短路以及在这里工作。
我怀疑你可枚举其他元素评估第一条件( String.IsNullOrEmpty(someNullString)
为false。 你能否证实?
提供更多的代码,以便我们可以分析一下这个。
你有没有在任何范围内一个变量t可以评价?
你尝试用这样的括号:
.Where(t => (String.IsNullOrEmpty(someNullString) ||
t.SomeProperty >= Convert.ToDecimal(someNullstring)))
?
有一种变通方法上的|| Linq中(或)运算符与C#根据你会在你的情况是这样做的:
.Where(t => t.SomeProperty >= Convert.ToDecimal(someNullstring ?? "0"))
当然,这可能不是你在特定情况下需要的解决方案,但至少它给一个想法如何避开错误。