[英]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.