.net 在C#中是否可以在一个查询中合并2个IDbContextFactory?

ybzsozfc  于 2023-01-31  发布在  .NET
关注(0)|答案(1)|浏览(121)

我知道如何从DB中检索这些数据,但不确定如何在C#中处理这些数据。我有两个方法,第一个返回我跟踪的俱乐部,第二个返回俱乐部的结果。我想创建第三个方法,它将返回我跟踪的所有俱乐部的结果。

ImmutableArray<ClubInActiveSessionForMemberSqlModel> myClubs;
using (var context = _contextFactory.CreateDbContext())
{
    myClubs = await context
        .ClubMembers
        .SetTracking(false)
        .Where(ClubMember =>
            ClubMember.MemberId == memberId &&
            ClubMember.ClubMemberRegistrationStatusTypeId == ClubMemberRegistrationStatusTypes.Registered.Id &&
            (ClubMember.Club!.Session!.StartDateUtc > DateTime.UtcNow || ClubMember.Club!.Session.EndDateUtc > DateTime.UtcNow))
        .Select(ClubMember => new ClubInActiveSessionForMemberSqlModel(
            ClubMember.ClubId,
            ClubMember.Club!.Name,
            ClubMember.Club.Session!.Id,
            ClubMember.Club.Session.Name,
            ClubMember.Club.Session.SessionTypeId,
            ClubMember.Club.ClubStanding!.ClubMatchWins,
            ClubMember.Club.ClubStanding.ClubMatchLosses
        ))
        .ToImmutableArrayAsync();
}

下面是我获取匹配数据的方法:

using (var context = _contextFactory.CreateDbContext())
{
    return await context
        .Clubs
        .SetTracking(false)
        .Where(t => t.Id == ClubId)
        .Select(t => new AllMatchResultsForClubByIdSqlModel(
            ClubId,
            t.Name,
            t.SessionId,
            t.Position1ClubMatches!
                .Where(tm => !completedOnly || (tm.ClubMatchResult != null && tm.ClubMatchResult.WinnerClubId.HasValue))
                .AsQueryable()
                .Select(selectClubMatchResultSqlModelExpression)
                .AsEnumerable(),
            t.Position2ClubMatches!
                .Where(tm => !completedOnly || (tm.ClubMatchResult != null && tm.ClubMatchResult.WinnerClubId.HasValue))
                .AsQueryable()
                .Select(selectClubMatchResultSqlModelExpression)
                .AsEnumerable()))
        .FirstOrDefaultAsync();
}

有没有可能合并这些2合1或如何做到这一点?我看到了一些类似的问题,但或多或少是为SQL语法,如:Multiple Context joining c#

zkure5ic

zkure5ic1#

是,可以联接两个查询。您可以使用'Join'方法。
我不打算提供完整的代码,但是你可以检查这个片段来获得一个想法。使用select方法来获取你想要的连接后的数据。

using (var context = _contextFactory.CreateDbContext())
{
    var results = await context
        .Where(...)
        .Join(context.Clubs, 
          ClubMember => ClubMember.ClubId, 
          Club => Club.Id, 
          (ClubMember, Club) => new { ClubMember, Club })

访问Method-Based Query Syntax Examples: Join Operators了解更多信息

相关问题