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