Mat*_*ann 4 c# linq entity-framework
我正在运行一个应该抛出异常的linq查询(基于我的理解),但事实并非如此.数据库中没有适合查询参数的项目.
以下内容不会引发异常,只是返回null:
from i in Items
where i.ItemID == 25
select i.Values.First(v => v.AttribID == 69)
Run Code Online (Sandbox Code Playgroud)
以下内容会按预期抛出异常:
(from i in Values
where i.ItemID == 25
where i.AttribID == 69
select i).First()
Run Code Online (Sandbox Code Playgroud)
通过测试几种不同形式的查询,我能找到的唯一区别是:当lambda表达式内部没有返回任何内容时,首先似乎没有抛出异常,但是当没有参数调用.First时,它确实如此.请帮我理解原因.
澄清...
from i in Items
where i.ItemID == 25
select i
Run Code Online (Sandbox Code Playgroud)
...返回1项.
在测试这些查询时,请参阅下面的linqPad结果:
Jon*_*Jon 10
第一个查询说:
过滤器
Items
,以仅包括具有ItemId == 25
来自每个滤波结果i
,选择第一个项v
内i.Values
,使得v.AttribID == 69
.
First
如果例如Items
是空的,这里不会抛出,因为"从每个过滤的结果i
"将精确处理零项,因此First
永远不会被调用.
第二个查询说:
过滤
Values
到只包含那些和ItemId == 25
,AttribId == 69
并给我第一个匹配的项目.
很明显,在这种情况下,如果不存在匹配的项目,First
则无法给出有意义的结果并且会抛出.
归档时间: |
|
查看次数: |
445 次 |
最近记录: |