C# 3表之间的联接

C# 3表之间的联接,c#,linq,join,C#,Linq,Join,我有3个表用户,HumanCustomer,CompanyCustomer 我想用LINQ在表之间连接,但我的查询不起作用,返回null 查询: var query = (from users in _ctx.Users join hCustomer in _ctx.HumanCustomers on users.Id equals hCustomer.UserId join cCustomer

我有3个表用户,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

查询运行正常。

您的问题可能是您试图迭代的动态变量

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)
                         });
你可以试试:

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
                     });

对数据不确定,但是的,您可能需要使用用户表两次,但别名不同如何使用@可能是您的CompanyCustomers表为空,或者“UserId”列的值为空。您能检查一下吗?在sql编辑器中编写查询时会发生什么?可能某个字段为null,并且由于该结果为null。请检查表中的数据,确保所有3个表都包含相同的UserId值。这个答案有什么帮助?