【发布时间】:2022-09-23 01:29:20
【问题描述】:
我在 C# 中使用 LINQ 加入另外 1 个表时遇到问题。现在我的查询可以加入 1 个表。我现有的查询是 TnWhatsapp table join Tenant table 下面是我的编码:
var query = _saasdbContext.TnWhatsapp.AsNoTracking();
if (isSAASAdmin == false)
query = query.Where(x => x.TenantId == tenantID);
int totalCount = await query.CountAsync();
query = QueryableExtensions.QueryOrderBy(query, sortList);
List<TnWhatsappMessage> whatsappDedicatedListForTenant = new List<TnWhatsappMessage>();
if (take == 0)
whatsappDedicatedListForTenant = await query.Skip(skip)
.Join(_saasdbContext.Tenant.AsNoTracking(),
tnWhatsapp => tnWhatsapp.TenantId,
tenant => tenant.Id,
//(tnWhatsapp, tenant) => new { tnWhatsapp, tenant })
//.Join(_saasdbContext.TnBranch.AsNoTracking(),
//branch => branch.Id,
(tnWhatsapp, tenant) => new TnWhatsappMessage()
{
Id = tnWhatsapp.Id,
TenantId = tnWhatsapp.TenantId,
BranchId = tnWhatsapp.BranchId,
InstanceId = tnWhatsapp.InstanceId,
Token = tnWhatsapp.Token,
TenantName = tenant.CompanyName,
DayLimit = tnWhatsapp.DayLimit,
MinuteLimit = tnWhatsapp.MinuteLimit,
})
.ToListAsync();
但是现在我不知道如何加入另一个表,我想让这个TnWhatsapp 表BranchId 加入TnBranchtable Id,然后我想得到TnBranch 表Code。下面是我在查询中的编辑部分代码,但它不能工作。
var query = _saasdbContext.TnWhatsapp.AsNoTracking();
if (isSAASAdmin == false)
query = query.Where(x => x.TenantId == tenantID);
int totalCount = await query.CountAsync();
query = QueryableExtensions.QueryOrderBy(query, sortList);
List<TnWhatsappMessage> whatsappDedicatedListForTenant = new List<TnWhatsappMessage>();
if (take == 0)
whatsappDedicatedListForTenant = await query.Skip(skip)
.Join(_saasdbContext.Tenant.AsNoTracking(),
tnWhatsapp => tnWhatsapp.TenantId,
tenant => tenant.Id,
(tnWhatsapp, tenant) => new { tnWhatsapp, tenant })
.Join(_saasdbContext.TnBranch.AsNoTracking(),
tnBranch => tnBranch.Id,
tnWhatsapp => tnWhatsapp.BranchId,
(tnWhatsapp, tenant, tnBranch) => new TnWhatsappMessage()
{
Id = tnWhatsapp.Id,
TenantId = tnWhatsapp.TenantId,
BranchId = tnWhatsapp.BranchId,
InstanceId = tnWhatsapp.InstanceId,
Token = tnWhatsapp.Token,
TenantName = tenant.CompanyName,
BranchName = tnBranch.Code,
DayLimit = tnWhatsapp.DayLimit,
MinuteLimit = tnWhatsapp.MinuteLimit,
})
.ToListAsync();
我的错误信息如下图所示:
这张照片是我最后一次尝试,但它也显示了错误。
希望有人能指导我如何解决这个问题。谢谢。
-
使用 LINQ 查询语法而不是方法语法以获得更好的可读性。它还将帮助您更好地构建查询。
-
谢谢。你能根据我的代码给我一个样本供参考吗?
-
由于我无法在此框中粘贴这么长的代码,因此我已将pastebin.com/1h7W8i16 粘贴到此处。
-
此外,pastebin 上的代码不起作用只是因为标识符在
on/equals部分中交换。与 SQL 不同,顺序很重要。您应该再试一次并修复订单。 LNQ 查询语法通常更容易阅读,尤其是对于连接和其他重要的表达式。