作者:峰子 | 来源:互联网 | 2023-10-15 16:32
我有以下声明:
List tracks = new List { "ABC", "DEF" };
var items = (from i in Agenda.AgendaSessions
select i).Where(p => p.Tracks.Any(s => tracks.Contains(s.Code)));
这将返回所有跟踪包含ABC或DEF的会话,现在当我重写下面的语句时,它会返回所有会话,如果该子句始终为真,那么有人可以对此有所了解吗?
var items = from i in Agenda.AgendaSessions
where i.Tracks.Any(s=> tracks.Contains(s.Code))
select i;
更新
如果在哪里有其他条款,是否会影响结果?
解决方法:
这两个代码片段是等效的,即在所有情况下它们应始终产生相同的结果.当然,这假设AgendaSessions,Tracks和.Contains()是我们期望的那样;如果它们是具有奇怪副作用的属性获取器/方法,例如修改轨道的内容,那么任何事情都可能发生.
换句话说,在不知道代码的其余部分是什么样的情况下,我们无法帮助您,因为两个代码片段之间没有语义差异.