c# – 当在Linq语句中使用Where子句时,产生的结果与在外部使用时产生的结果不同

我有以下声明:

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的会话,现在当我重写下面的语句时,它会返回所有会话,如果该子句始终为真,那么有人可以对此有所了解吗?

var items = from i in Agenda.AgendaSessions
  where i.Tracks.Any(s=> tracks.Contains(s.Code))
  select i;

更新

如果在哪里有其他条款,是否会影响结果?

最佳答案 这两个代码片段是等效的,即在所有情况下它们应始终产生相同的结果.当然,这假设AgendaSessions,Tracks和.Contains()是我们期望的那样;如果它们是具有奇怪副作用的属性获取器/方法,例如修改轨道的内容,那么任何事情都可能发生.

换句话说,在不知道代码的其余部分是什么样的情况下,我们无法帮助您,因为两个代码片段之间没有语义差异.

点赞