一对多关系外键计数
one-to-many relationship foreign key count
public class User
{
[Key]
public int id { get; set; } //PK
public string emailAddress { get; set; }
public List<Task> tasks { get; set; }
}
public class Task
{
[Key]
public int id { get; set; } //PK
public string name { get; set; }
//Navigation Properties
public User user{ get; set; }
public int userId { get; set; }
}
我已经按照 MSDN 教程配置了上面的两个模型。那么如何正确获取与用户关联的任务数?
我试过 context.users.Where(u => u.emailAddress == email).FirstOrDefaultAsync().tasks.count;
但它给了我一个关于任务对象的空指针引用。
然后我尝试 context.tasks.Where(o=>o.user.emailAddress==email).Count()
给我正确的号码所以它有效
所以我想知道为什么列表是空引用而不是包含一些元素的列表?谢谢指教
尝试以下查询:
var cnt = context.users
.Where(u => u.emailAddress == email)
.Select(u => u.tasks.Count())
.FirstOrDefault();
您必须使用 LINQ 扩展 Count()
而不是 List.Count
我认为您使用的是 entity framework 和预加载 (description)。在这种情况下,您应该显式调用 Include()
方法来加载所有用户任务。示例:
await (context.users.Where(u => u.emailAddress == email).Include(u => u.Tasks).FirstOrDefaultAsync()).Tasks.Count();
UPD:不适用于生产
public class User
{
[Key]
public int id { get; set; } //PK
public string emailAddress { get; set; }
public List<Task> tasks { get; set; }
}
public class Task
{
[Key]
public int id { get; set; } //PK
public string name { get; set; }
//Navigation Properties
public User user{ get; set; }
public int userId { get; set; }
}
我已经按照 MSDN 教程配置了上面的两个模型。那么如何正确获取与用户关联的任务数?
我试过 context.users.Where(u => u.emailAddress == email).FirstOrDefaultAsync().tasks.count;
但它给了我一个关于任务对象的空指针引用。
然后我尝试 context.tasks.Where(o=>o.user.emailAddress==email).Count()
给我正确的号码所以它有效
所以我想知道为什么列表是空引用而不是包含一些元素的列表?谢谢指教
尝试以下查询:
var cnt = context.users
.Where(u => u.emailAddress == email)
.Select(u => u.tasks.Count())
.FirstOrDefault();
您必须使用 LINQ 扩展 Count()
而不是 List.Count
我认为您使用的是 entity framework 和预加载 (description)。在这种情况下,您应该显式调用 Include()
方法来加载所有用户任务。示例:
await (context.users.Where(u => u.emailAddress == email).Include(u => u.Tasks).FirstOrDefaultAsync()).Tasks.Count();
UPD:不适用于生产