在EF数据优先方法中使用外键表的外连接

时间:2017-10-27 14:24:27

标签: c# entity-framework linq

我有一个表包含用户信息的用户。我有一个表包含产品信息的产品。我有一个名为UserProduct的表,它充当联结表,其字段是UserId和ProductId。我正在使用Entity Framework数据库的第一种方法。

我想使用Linq进行外连接以查找以下数据。

  1. “用户”表中的所有用户。

  2. 所有使用名为isPurchased的布尔值购买特定产品的用户。

  3. 我的想法是将外部联接表用户留给UserProduct并获取所有用户以及他们是否有类似的产品。

    var result = from a in Users 
             join b in UserProduct(Not available through EF) on a.Id equals b.prodId into group1
             from g1 in group1.DefaultIfEmpty()
             select new 
             {
                  id =  g1.Id,                  
                  isPurchased = g1.prodId != null
             }.ToList();
    

    但是在EF映射中,没有创建对象UserProduct,所以我不能直接在Linq查询中使用它?那么我该怎么做呢?有没有办法可以使用linq将表与实际的表名(UserProduct)连接起来而不是加入实体?

1 个答案:

答案 0 :(得分:0)

假设Users包含用于表示联结信息的属性List<Products> products,以及用于表示特定产品的变量boughtProductId

var result = from u in Users
             let isPurchased = u.products.Any(p => p.Id == boughtProductId)
             select new {
                 id =  isPurchased ? boughtProductId : null,
                 isPurchased
             }.ToList();