将列表中模型的属性与常量值进行比较

时间:2015-02-13 23:18:57

标签: entity-framework where

这是一个简单的问题,但我从EF开始并且不知道:

我有两个类(db对象):

公司(简化)

public class Company
{
    public int ID { get; set; }
    public string Name { get; set; }

    public virtual ICollection<UserGroup> UserGroups { get; set; }    
}

和userGroup(组中有许多用户):

public class UserGroup
{
    public int ID { get; set; }
    public string Name { get; set; }

    public virtual ICollection<ApplicationUser> Users { get; set; }
    public virtual ICollection<Company> Companies { get; set; }
}

在控制器中,我需要选择具有特定UserGroupID的公司。我不知道如何写出选择条件。我的意思是:

        var currentUser = db.Users.Find(User.Identity.GetUserId());
        var companies = db.Companies
            .Include(c => c.Address)
            .Include(c => c.User)
            .Where(c => c.UserGroups == currentUser.UserGroup)
            ;

2 个答案:

答案 0 :(得分:1)

看到你的ApplicationUser课会很有帮助,但我想它有UserGroup的导航属性?如果是这样,你可以这样做:

db.Users.Where(u => u.Id == User.Identity.GetUserId())
  .SelectMany(u => u.UserGroups)
  .SelectMany(g => g.Companies)
  .Distinct();

答案 1 :(得分:1)

我喜欢在我想要返回的实体上编写where子句。在你的情况下:

db.Companies.Where(c => c.UserGroups.Any(g => g.ID == currentUser.UserGroup.ID));

这样您就不必添加Distinct()。