左连接linq

时间:2016-01-27 22:26:55

标签: c# entity-framework linq

我有一个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);

我尝试了相同的查询导航属性,该属性已编入索引,即:上面的用户。然而查询超时。

使用左连接是否有更有效的解决方案?

1 个答案:

答案 0 :(得分:1)

你应该更好地使用外键,但如果这真的是你的类看起来你可以尝试

_db.Users.Where(u => !_db.Activities.Any(u => a.ApplicationUser == u));