c# - 这两种说法是同一回事吗?

标签 c# .net linq

以下两个语句是否会做完全相同的事情,包括延迟绑定(bind)等副作用?

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() 
        });

编辑: 如果我使用第一种语法或第二种语法,类似的语句是否会相同

最佳答案

编译器会在编译过程中将第一种方法转化为第二种方法。

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

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)

关于c# - 这两种说法是同一回事吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4740641/

相关文章:

c# - Excel 后台进程未关闭

c# - 如何调用向导来添加新的项目模板

c# - 选择后的每次迭代

.net - 我可以在 XPath 表达式中使用 Regex 吗?

.net - 从 .NET 中的文本中提取关键字

c# - 创建 Thickness() 时如何使用合格的 Double?

c# - Nlog JsonLayout 不包含 LogEvent 属性

c# - 在 Bot Framework + Facebook Messenger 中随机收到 "OAuthException"

asp.net-mvc-3 - MVC3 代码优先以及如何使用 LINQ2SQL

c# - LINQ to Entities 查询以展平结果并选择和分组所需信息