C# 3表之间的联接
我有3个表用户,HumanCustomer,CompanyCustomer 我想用LINQ在表之间连接,但我的查询不起作用,返回null 查询: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
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值。这个答案有什么帮助?