这两个陈述是否意味着相同的事情?

时间:2011-01-19 20:54:20

标签: c# .net linq

以下两个语句是否完全相同,包括后期绑定等副作用?

Ilist<SomeClass> sessions = SomeFunction()
var tmp = from session in sessions
          select new ConnectedUsers()
              {
                  ID = session.SessionId,
                  Username = session.UserName,
                  HostName = session.ClientName,
                  IpAddress = session.ClientIPAddress.ToString()
              };
var tmp2 = sessions.Select((session) => new ConnectedUsers() 
        { 
            ID = session.SessionId, 
            Username = session.UserName, 
            HostName = session.ClientName, 
            IpAddress = session.ClientIPAddress.ToString() 
        });

编辑: 如果我使用第一种语法或第二种语法

,类似的语句是否会相同

3 个答案:

答案 0 :(得分:5)

编译器将在编译过程中将第一个方法转换为第二个方法。

但是,如果使用一个简单的select子句创建一个非平凡的查询表达式,则不会发出Select调用。
因此,以下每对expresisons都将以相同的方式编译:

from x in Enumerable.Range(0,1000) where x / 2 == x / 2.0 select x
Enumerable.Range(0,1000).Where(x => x / 2 == x / 2.0)  //No Select call

from x in Enumerable.Range(0,1000) select x
Enumerable.Range(0,1000).Select(x => x)

答案 1 :(得分:4)

编译它,查看IL中的生成代码或通过Reflector。

答案 2 :(得分:1)

是。虽然在ConnectedUsers之后不需要括号。