我认为这个查询非常简单,但是它提出了一个FormatException("输入字符串的格式不正确"):
Submissions.Where(s => (false && s.Status == Convert.ToInt16("")))
Run Code Online (Sandbox Code Playgroud)
(当然,在我的代码中,另一个计算结果为'false'的表达式位于'&&'之前)
那么为什么'&&'之后的部分被评估,因为第一部分总是假的,总表达式永远不能评估为true?
情况特别奇怪,因为只有Convert.ToInt16("")部分似乎引发异常 - 我原始查询的其他部分或多或少相同的结构,如
Submissions.Where(s => (false && s.SubmissionDate <= DateTime.Now))
Run Code Online (Sandbox Code Playgroud)
正确评估.
如果Submissions是IQueryable<T>,那么这不是常规的C#委托,而是表达式树.一些代码(LINQ提供者)必须将这个树拉开并理解它 - 所以如果你在表达式中有奇怪的东西,那么期望奇数输出.
| 归档时间: |
|
| 查看次数: |
222 次 |
| 最近记录: |