[英]DbContext -> DbSet -> Where clause is missing (Entity Framework 6)
我已经阅读了一些实体框架6的教程......
基础很简单。
using (var context = new MyContext())
{
User u = context.Users.Find(1);
}
但是如何在用户的“DbSet”上使用“Where”或其他内容?
public class MyContext : DbContext
{
public MyContext()
: base("name=MyContext")
{
//this.Database.Log = Console.Write;
}
public virtual DbSet<User> Users { get; set; }
}
用户
[Table("User")]
public class User : Base
{
public Guid Id { get; set; }
[StringLength(100)]
public string Username { get; set; }
}
这就是不起作用的问题。
string username = "Test";
using (var context = new MyContext())
{
User u = from user in context.Users where user.Username == username select user;
}
错误:源类型“DbSet”的查询模式没有实现。 找不到“哪里”。 可能缺少“System.Link”的引用或using指令。
如果我尝试自动完成方法,则没有。
为什么它不起作用? :(
//编辑:将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)
感谢@Grant Winney和@Joe。
using System.Linq;
添加using 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
并在此方法中直接放置子句。 Single
仅在只有一个元素存在时才适用(适合该子句)。 如果出现两个元素,则抛出异常。 First
类似于Single
,但如果存在多个项目(适合该子句),它不会抛出异常。 它只会返回它找到的第一个元素(拟合子句)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.