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

时间:2010-08-08 08:57:16

标签: c# asp.net linq

我有以下声明:

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;

更新

如果其中有其他条款,是否会影响结果?

1 个答案:

答案 0 :(得分:2)

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

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