我正在使用 SMO,我有这行代码:
var results = (from User user in database.Users
where user.LoginType == LoginType.WindowsUser
select new { user.Name, user.Login }).ToList();
但是无论出于什么原因,我都不能这样写查询:
var results = database.Users
.Where(user => user.LoginType == LoginType.WindowsUser)
.Select(user => new { Name = user.Name, Login = user.Login })
.ToList();
我得到的错误是 'UserCollection' 不包含 'Where' 的定义,并且找不到接受类型为 'UserCollection' 的第一个参数的扩展方法 'Where'(您是否缺少 using 指令或汇编引用?)
但据我所知,这两种说法是相同的。
为什么会这样?
最佳答案
不,它们非常轻微不同。因为你在这里有一个显式类型的范围变量:
from User user in database.Users
您的查询等同于:
var results = database.Users
.Cast<User>();
.Where(user => user.LoginType == LoginType.WindowsUser)
.Select(user => new { user.Name, user.Login })
.ToList();
大概是你的 UserCollection
类型工具 IEnumerable
, 但不是 IEnumerable<User>
- 这就是您需要 Actor 阵容的原因。
您可以通过隐式键入范围变量来使用查询表达式引发相同的错误:
// This will fail
var results = (from user in database.Users
where user.LoginType == LoginType.WindowsUser
select new { user.Name, user.Login }).ToList();
关于c# - 如何使用方法语法重写这一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32931276/