我有一个Activities
模型如下
public class Activity
{
// this is email
public string CreatedBy {set;get;}
// Relationship
public ApplicationUser User{set;get;}
}
然后我有用户模型:
public class ApplicationUser
{
// ID from Identity
public string Id{set;get;}
public string Email {set;get;}
}
当然我在数据库中有相应的表。
我需要知道的是没有做任何活动的用户。
虽然以下代码有效,但效率不高且超时。因为我在活动表中有500K活动。
var userz = _db.Users.AsNoTracking();
var groupedUsers = _db.Activities.AsNoTracking().GroupBy(x => x.CreatedBy).Select(group => new { CreatedBy = group.Key, Count = 1 }).Select(x=> x.CreatedBy);
var result = userz.Where(x => groupedUsers.Contains(x.Email) == false);
我尝试了相同的查询导航属性,该属性已编入索引,即:上面的用户。然而查询超时。
使用左连接是否有更有效的解决方案?
答案 0 :(得分:1)
你应该更好地使用外键,但如果这真的是你的类看起来你可以尝试
_db.Users.Where(u => !_db.Activities.Any(u => a.ApplicationUser == u));