C# DbContext->;DbSet->;缺少Where子句(实体框架6)

C# DbContext->;DbSet->;缺少Where子句(实体框架6),c#,entity-framework,C#,Entity Framework,我读了一些实体框架6的教程 基础很简单 using (var context = new MyContext()) { User u = context.Users.Find(1); } 但是如何使用“Where”或“DbSet”上的其他内容与用户联系呢 public class MyContext : DbContext { public MyContext() : base("name=MyContext") { //this.Dat

我读了一些实体框架6的教程

基础很简单

using (var context = new MyContext())
{
    User u = context.Users.Find(1);
}
但是如何使用“Where”或“DbSet”上的其他内容与用户联系呢

public class MyContext : DbContext
{
    public MyContext()
        : base("name=MyContext")
    {
        //this.Database.Log = Console.Write;
    }

    public virtual DbSet<User> Users { get; set; }
}
这就是不起作用的问题

string username = "Test";
using (var context = new MyContext())
{
    User u = from user in context.Users where user.Username == username select user;
}
错误:没有实现源类型“DbSet”的查询模式找不到“Where”。可能缺少“System.Link”的引用或使用指令

如果我尝试自动完成这些方法,那么就没有了

为什么它不起作用(

//编辑: 将System.Linq添加到文件顶部会更改上述问题的函数,这样我就不再有问题了

但是为什么现在
的位置是错误的呢

The type "System.Linq.IQueryable<User>" cant converted into "User" explicit. There already exists an explicit conversion. (Possibly a cast is missing)
类型“System.Linq.IQueryable”无法转换为“User”显式。已存在显式转换。(可能缺少强制转换)

感谢@Grant Winney和@Joe

使用System.Linq;
添加到文档的名称空间/顶部,在该名称空间/顶部我正在处理上面的代码,修复了该问题

使用上面的行可以用于列表的第一项

User user = (select user from context.Users where user.Username == username select user).First();
(第二个)问题在于您的期望:

User u = from user in context.Users where user.Username == username select user;
您需要单个元素。但是
Where
子句返回项目列表(IEnumerable)。即使只有一个实体符合Where子句,它仍将返回一个列表(其中包含单个项目)

如果您想要单个项目,则需要选择该列表中的
.First()
.single()
项目

一些考虑:

  • 我刚才提到的任何一种方法都可以使用类似where子句的子句,这意味着您可以跳过
    where
    ,直接将子句放在这个方法中
  • Single
    仅在仅存在一个元素(符合子句)时有效。如果出现两个元素,将引发异常
  • First
    的工作原理类似于
    Single
    ,但如果存在多个项(适合子句),它不会抛出异常。它只会返回它找到的First元素(适合子句)

是否将System.Linq引用添加到命名空间?Wtf!?添加“using System.Linq”在我使用上面字符串的文件顶部修复了问题…有趣的是…你能重新检查这个问题吗。我也添加了一个与System.Linq有关的问题。谢谢!!查询返回的是System.Linq.IQueryable类型,你正试图将其放入User类型的变量中。我想你需要First()在查询结束时,您使用Entity Framework Core 3预览版节省了我的时间
User u = from user in context.Users where user.Username == username select user;