Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用方法语法重写这一行?_C#_Linq - Fatal编程技术网

C# 如何使用方法语法重写这一行?

C# 如何使用方法语法重写这一行?,c#,linq,C#,Linq,我与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 => us

我与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();

你是否有
使用System.Linq在文件的顶部
Where
Select
是扩展方法。@BrianRogers:这对于查询表达式表单也是失败的-编写查询表达式不会隐式导入任何名称空间。是的。否则我就不能使用查询语法。我发现错误
找不到源类型“UserCollection”的查询模式的实现找不到Cast。您是否缺少对“System.Core.dll”的引用或“System.Linq”的using指令?
// This will fail
var results = (from user in database.Users
               where user.LoginType == LoginType.WindowsUser
               select new { user.Name, user.Login }).ToList();