【问题标题】:Join more table using with LINQ in C#在 C# 中使用 LINQ 加入更多表
【发布时间】: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();

但是现在我不知道如何加入另一个表,我想让这个TnWhatsappBranchId 加入TnBranchtable Id,然后我想得到TnBranchCode。下面是我在查询中的编辑部分代码,但它不能工作。

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 查询语法通常更容易阅读,尤其是对于连接和其他重要的表达式。

标签: c# linq


【解决方案1】:

我已经根据@madreflection 的建议增强了我提供的评论。这是 LINQ 的查询语法。

from tnWhatsapp in query.Skip(skip)
join tenant in _saasdbContext.Tenant.AsNoTracking() on tnWhatsapp.TenantId equals tenant.Id
join tnBranch in _saasdbContext.TnBranch.AsNoTracking() on tnWhatsapp.BranchId equals tnBranch.Id
select 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();

希望这可以帮助!

【讨论】:

    猜你喜欢
    • 2017-06-09
    • 1970-01-01
    • 2011-03-02
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 2013-05-16
    相关资源
    最近更新 更多