DbContext - > DbSet - >缺少Where子句(Entity Framework 6)

Pat*_*ckB 10 c# entity-framework

我已经阅读了一些实体框架6的教程......

基础很简单.

using (var context = new MyContext())
{
    User u = context.Users.Find(1);
}
Run Code Online (Sandbox Code Playgroud)

但是如何在用户的"DbSet"上使用"Where"或其他内容?

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

    public virtual DbSet<User> Users { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

用户

[Table("User")]
public class User : Base
{
    public Guid Id { get; set; }

    [StringLength(100)]
    public string Username { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这就是不起作用的问题.

string username = "Test";
using (var context = new MyContext())
{
    User u = from user in context.Users where user.Username == username select user;
}
Run Code Online (Sandbox Code Playgroud)

错误:源类型"DbSet"的查询模式没有实现.找不到"哪里".可能缺少"System.Link"的引用或using指令.

如果我尝试自动完成方法,则没有.

VS2013

为什么它不起作用?:(

//编辑:将System.Linq添加到文件顶部会更改上述问题的功能,以便我不再有问题.

但为什么where现在错了呢?

The type "System.Linq.IQueryable<User>" cant converted into "User" explicit. There already exists an explicit conversion. (Possibly a cast is missing)
Run Code Online (Sandbox Code Playgroud)

以上不起作用,底层工作

Pat*_*ckB 35

感谢@Grant Winney和@Joe.

添加using System.Linq;到文档的命名空间/顶部我正在修改上面的代码修复了问题.

使用上面的行,它适用于列表的第一项.

User user = (select user from context.Users where user.Username == username select user).First();
Run Code Online (Sandbox Code Playgroud)

  • 即使在 2019 年,您也通过 Entity Framework Core 3 预览版节省了我的时间 (2认同)