使用 Linq 通过 Entity Framework 关系筛选父记录
Use Linq to shortlist parent records by using Entity Framework relations
我在 Visual Studio 2013 年有一个使用 DB-First Entity Framework 5 和 .NET Framework 4.5 的项目。我有一个一般要求,我将使用一个示例进行解释:在数据库中有以下 tables:
- 公司
- 用户
- company_user << 多对多关系 table for
公司和用户
我在 .NET 中创建实体模型后,我的公司 class 包含以下字段,其中包括:
public virtual ICollection<company_user> company_user { get; set; }
我想编写一个 linq 查询,根据其 company_user 集合中的至少一条记录具有 Id == x 的条件,从公司集合中为我提供一组过滤记录,其中x 是一些用户 ID。这意味着我想获取与某个用户相关的所有公司的列表。目前我是这样做的,这...不优雅:
var cList1 = (from c in db.companies
join cu in db.company_user on c.Id equals cu.CompanyId
select new
{
CompanyId = cu.CompanyId,
UserId = cu.UserId,
CompanyName = c.Name
}).ToList().Where(x => x.UserId == u.Id);
List<company> companies = new List<company>();
foreach (var cv in cList1)
{
company c = new company();
c.Id = cv.CompanyId;
c.Name = cv.CompanyName;
companies.Add(c);
}
//companies now has the set of companies that I need
请帮我写一个最简洁的查询来实现同样的效果。
提前致谢
扎瓦尔
怎么样:
db.companies.Where(c => c.company_user.Any(cu => cu.UserId == u.Id));
我在 Visual Studio 2013 年有一个使用 DB-First Entity Framework 5 和 .NET Framework 4.5 的项目。我有一个一般要求,我将使用一个示例进行解释:在数据库中有以下 tables:
- 公司
- 用户
- company_user << 多对多关系 table for 公司和用户
我在 .NET 中创建实体模型后,我的公司 class 包含以下字段,其中包括:
public virtual ICollection<company_user> company_user { get; set; }
我想编写一个 linq 查询,根据其 company_user 集合中的至少一条记录具有 Id == x 的条件,从公司集合中为我提供一组过滤记录,其中x 是一些用户 ID。这意味着我想获取与某个用户相关的所有公司的列表。目前我是这样做的,这...不优雅:
var cList1 = (from c in db.companies
join cu in db.company_user on c.Id equals cu.CompanyId
select new
{
CompanyId = cu.CompanyId,
UserId = cu.UserId,
CompanyName = c.Name
}).ToList().Where(x => x.UserId == u.Id);
List<company> companies = new List<company>();
foreach (var cv in cList1)
{
company c = new company();
c.Id = cv.CompanyId;
c.Name = cv.CompanyName;
companies.Add(c);
}
//companies now has the set of companies that I need
请帮我写一个最简洁的查询来实现同样的效果。
提前致谢 扎瓦尔
怎么样:
db.companies.Where(c => c.company_user.Any(cu => cu.UserId == u.Id));