当前位置: 首页 > 面试题库 >

Linq Lambda表达式多对多表选择

翟凯
2023-03-14
问题内容

编辑: 直到这里,我得到适当的4行,但它们都是相同的结果(我知道我需要4行,但是有不同的结果)

    return this._mediaBugEntityDB.LotteryOffers
        .Find(lotteryOfferId).LotteryDrawDates
        .Join(this._mediaBugEntityDB.Lotteries, ldd => ldd.LotteryId, lot => lot.Id, (ldd, lot) =>
            new Lottery
            {
                Name = lot.Name,
                CreatedBy = lot.CreatedBy,
                ModifiedOn = lot.ModifiedOn
            }).AsQueryable();

我的问题是,如何仅通过LotteryOfferId来通过多对多表检索所有彩票?

我要实现的是通过LotteryDrawDateId从彩票表中获取数据。

首先,我使用LotteryOfferId从中间表获取DrawDates,然后通过中间表获取drawDateIds以在LotteryDrawDate表中使用它们。从该表中,我需要通过LotteryDrawDate表中的LotteryId退回Lottey表。

我通过普通的SQL获得此信息(LotteryOffersLotteryDrawDates是数据库中的中间表,在模型中未显示):

选择Name,Lotteries.CreatedBy,Lotteries.ModifiedOn,count(Lotteries.Id),因为来自Lotteries的TotalDrawDates加入了Lotteries上的LotteryDrawDates.Id
= LotteryDrawDates.LotteryId加入了LotteryDrawDates.Id =
LotteryOffersLotteryDrawDates。 ,Lotteries.CreatedBy,Lotteries.ModifiedOn

但是Linq是另外一个故事:P

我想使用lambda表达式来做到这一点。谢谢


问题答案:

你可以这样做:

var query = from lo in this._mediaBugEntityDB.LotteryOffers
            where lo.lotteryOfferId == lotteryOfferId
            from ld in lo.LotteryDrawDates
            group ld by ld.Lottery into grp
            select grp.Key;

我使用查询语法来执行此操作,因为(我认为)更容易看到发生的情况。重点是分组依据Lottery,因为您可以得到许多LotteryDrawDates相同的分组Lottery

如果要显示LotteryDrawDates每个的计数,Lottery最好采用其他html" target="_blank">方法:

from lot in this._mediaBugEntityDB.Lotteries.Include(x => x.LotteryDrawDates)
where lot.LotteryDrawDates
         .Any(ld => ld.LotteryDrawDates
                      .Any(lo => lo.lotteryOfferId == lotteryOfferId))
select lot

现在,您将获得加载了Lottery对象LotteryDrawDates集合的对象,因此之后您可以进行访问lottery.LotteryDrawDates.Count()而不会出现延迟加载异常的情况。



 类似资料:
  • 主要内容:语法,示例if表达式也允许进行一次评估(计算)多个表达式。在 Erlang 这个语句的一般形式显示在下面的程序 - 语法 在 Erlang 中,条件是计算结果为真或假的表达式。如果条件为真,则 statement#1 会被执行。否则评估(计算)下一个条件表达式等等。如果没有一个表达式的计算结果为真,那么 defaultstatement 评估(计算)。 下图是上面给出的语句的一般流程示意图: 下面的程序是在

  • 问题内容: 我有一个包含 产品* 列表的表 订单 。对于与特定订单相对应的每个 产品 ,我需要存储一个 地址 列表,在该 地址 中应将单个产品(每个订单基于每个产品)发送到 * 所以我有这张表,在 订单 和 产品 上有很多很多,我需要的是将上表中的每个条目映射到 地址 列表。所以我需要像 并将上表中的条目映射到地址列表,我需要上述PK和地址ID(我的地址表的主键)上的多对多表 这里PK_Order

  • 问题内容: 我有桌子: 我想写一个返回BookName,FirstName,LastName,RubricName的SELECT查询。 我有两个单独的查询,但我不知道如何在一个选择中编写此查询。这就是我得到的: 它工作正常,但如何在一个选择中编写? 我尝试这样做,但是不起作用: 它返回错误: 问题答案: 试试这个查询

  • 问题内容: 我对多行字符串的replaceAll有问题: 以上适用于testWorks,但不适用于testIllegal !?为什么会这样,我该如何克服呢?我需要替换跨越多行的注释/ * … * /。 问题答案: 您需要使用标志来表示点应与换行符匹配。例如 或者使用例如在模式中指定标志

  • if表达式还允许一次评估多个表达式。 Erlang中此语句的一般形式显示在以下程序中 - 语法 (Syntax) if condition1 -> statement#1; condition2 -> statement#2; conditionN -> statement#N; true -> defaultstatement end. 在Erlang中,条件是一个表达

  • 我正在使用查询与Spring数据jpa。我已经实现了自定义存储库来查找人名。人员实体如下所示: 实施的自定义存储库: 在选择表达式中,我想连接三列来构造全名。如果数据库有如下记录- 那么我想选“约翰·斯诺先生”。有什么办法可以做到吗? 我不想选择整个记录来连接值,因为实体有其他列和许多关联,加载整个记录不好。