我有两门课:
部门
public string Id{ get; set; }
public string Name { get; set; }
public virtual ICollection<Post> Posts { get; set; }帖子
public string Id{ get; set; }
public string Name { get; set; }
public string DepartmentId { get; set; }
public virtual Department Department { get; set; }我正在尝试加载department
var dep = await _db.Departments.FindAsync("someid");现在,我想获得包含异步的第一项:
var post = await dep.FirstAsync(s=>s.Name==name);FirstAsync不存在吗?
第二个问题是实现自定义标识,并尝试用FindAsync加载用户,但它不存在。我使用:var user = await _db.Users.FindAsync(User.Identity.GetUserId()),它不包含FindAsync函数,但是FirstAsync和Find存在。
发布于 2016-02-17 08:14:31
不能使用第二个FirstAsync,因为您的对象是一个部门。您的第一个语句正在等待一个FindAsync方法。FindAsync方法启动一个类型为Task的任务。如果你等待这个任务,它会导致一个部门。因此,您可能需要为第一个语句指定一个确切的类型,以澄清以下问题:
Department dep = await _db.Departments.FindAsync("someid");FirstAsync是一种用于IQueryables的方法。你的部门不是IQueryable,所以你不能使用它。如果您想要一个post (您的部门类有许多不同的集合),您将特别需要引用post集合。然而,Posts集合没有异步方法。您可以使用.AsQueryable()方法将其转换为可查询的,然后使用FindAsync。
但是,如果您只对该帖子感兴趣,您也可以将其写入一个LINQ查询中,并让数据库查找相关项:
string postName = "...";
string depId = "..."";
var postQuery =
from post in _db.Posts
where post.Name == postName && post.Department.Id == depId
select post;
var post = postQuery.FirstAsync();https://stackoverflow.com/questions/29274684
复制相似问题