【问题标题】:Join between 3 table在 3 个表之间加入
【发布时间】:2019-04-22 12:46:53
【问题描述】:

我有 3 个表 User,HumanCustomer,CompanyCustomer 我想用 LINQ 在表之间加入,但我的查询不起作用并且它返回 null

查询:

var query = (from users in _ctx.Users
                         join hCustomer in _ctx.HumanCustomers on users.Id equals hCustomer.UserId
                         join cCustomer in _ctx.CompanyCustomers  on users.Id equals cCustomer.UserId
                         select new
                         {
                             users.Id,
                             users.Mobile,
                             hCustomer.LastName,
                             hCustomer.Name,
                             cCustomer.CompanyName
                         });
 foreach (var item in query)
            {
                AllCustomerViewModel allCustomer = new AllCustomerViewModel();

                if (item.Name != null)
                {
                    allCustomer.UserId = item.Id;
                    allCustomer.FullName = item.Name + item.LastName;
                    allCustomer.Mobile = item.Mobile;
                    Customer.Add(allCustomer);
                }
}

代码没有进入foreach

我认为问题在于使用 UserId 两次,因为当我删除时

join cCustomer in _ctx.CompanyCustomers  on users.Id equals cCustomer.UserId

查询运行正确。

【问题讨论】:

  • 不确定数据,但是是的,您可能需要使用用户表两次,但别名不同
  • 如何使用? @布拉德
  • 可能是您的 CompanyCustomers 表为空,或者“UserId”列的值为空。可以查吗?
  • 当您在 sql 编辑器中编写该查询时会发生什么?可能某些字段为空,因此结果为空。
  • 检查表中的数据,确保所有 3 个表都包含相同的 UserId 值

标签: c# linq join


【解决方案1】:

也许您的问题是您尝试迭代的动态变量。

你可以试试:

foreach (dynamic item in query)

或者,您可以编写类来保存您选择的值,方法是将查询的开头更新为:

var query = (from users in _ctx.Users
                     join hCustomer in _ctx.HumanCustomers on users.Id equals hCustomer.UserId
                     join cCustomer in _ctx.CompanyCustomers  on users.Id equals cCustomer.UserId
                     select new MyClass
                     {
                         Id = users.Id,
                         Mobile = users.Mobile,
                         LastName = hCustomer.LastName,
                         Name = hCustomer.Name,
                         CompanyName = cCustomer.CompanyName
                     });

【讨论】:

    【解决方案2】:
    you can try this way..
    
    var query = (from users in _ctx.Users
                             join hCustomer in _ctx.HumanCustomers on users.Id equals hCustomer.UserId
                             join cCustomer in _ctx.CompanyCustomers  on users.Id equals cCustomer.UserId
                             select new
                             {
                                 Id = users.Id,
                                 Mobile = users.Mobile,
                                 LastName = hCustomer.LastName,
                                 Name = hCustomer.Name,
                                 CompanyName = (cCustomer == null ? "" : cCustomer .CompanyName)
                             });
    

    【讨论】:

    • 这个答案有什么帮助?
    猜你喜欢
    • 2022-07-01
    • 2019-12-23
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    相关资源
    最近更新 更多