在Linq中,卡在正在分组的子查询上`

在Linq中,卡在正在分组的子查询上`,linq,Linq,我有一些Linq代码,它工作得很好。这是一个在Where子句中有子查询的查询。此子查询正在执行groupby。效果很好 问题是我不知道如何将子查询的结果从子查询中抓取到父查询中 首先,这是密码。之后,我将解释我想要提取的数据 var results = (from a in db.tblProducts where (from r in db.tblReviews where r.IdUserModified ==

我有一些Linq代码,它工作得很好。这是一个在
Where
子句中有子查询的查询。此子查询正在执行groupby。效果很好

问题是我不知道如何将子查询的结果从子查询中抓取到父查询中

首先,这是密码。之后,我将解释我想要提取的数据

    var results = (from a in db.tblProducts
               where (from r in db.tblReviews
                      where r.IdUserModified == 1
                      group r by
                          new
                              {
                                  r.tblAddress.IdProductCode_Alpha,
                                  r.tblAddress.IdProductCode_Beta,
                                  r.tblAddress.IdProductCode_Gamma
                              }
                      into productGroup
                          orderby productGroup.Count() descending
                          select
                          new
                              {
                                  productGroup.Key.IdProductCode_Alpha,
                                  productGroup.Key.IdProductCode_Beta,
                                  productGroup.Key.IdProductCode_Gamma,
                                  ReviewCount = productGroup.Count()
                              }).Take(3)
                   .Any(
                   r =>
                   r.IdProductCode_Alpha== a.IdProductCode_Alpha&& 
                       r.IdProductCode_Beta== a.IdProductCode_Beta&&
                       r.IdProductCode_Gamma== a.IdProductCode_Gamma)
               where a.ProductFirstName == ""
               select new {a.IdProduct, a.FullName}).ToList();
嗯。我更改了一些字段和表的名称以保护无辜者。:)

见最后一行:-

select new {a.IdProduct, a.FullName}).ToList();
我希望在其中包含ReviewCount(来自子查询)。我不知道怎么做

为了帮助理解问题,这是数据的样子

子查询 IdProductCode_Alpha=1,IdProductCode_Beta=2,IdProductCode_Gamma=3,ReviewCount=10 ... 第二排。。。 ... 第三排

父查询 IdProduct=69,全名='Jon Skeet's Wonder Balm'

因此子查询获取我需要的实际数据。父查询根据子查询筛选器确定正确的产品

编辑1:Schema TBL产品

  • IdProductCode
  • 全名
  • 产品名
tblReviews(每个产品都有零到多个评论)

  • IdProduct
  • IdProductCode_Alpha(可以为空)
  • IdProductCode_Beta(可以为空)
  • IdProductCode_Gamma(可以为空)
  • 艾德森
因此,我试图找到一个人评论过的前三大产品

linq工作得很好。。。只是我不知道如何在父查询中包含计数(即从子查询中提取结果)


干杯:)

虽然我不完全理解LINQ,但加入工作不是很好吗?

我知道我的答案没有帮助,但看起来您需要一个与内部表(?)的联接。

虽然我不完全理解LINQ,但联接不起作用吗?

我知道我的答案没有帮助,但看起来您需要一个与内部表(?)的联接。

我同意shahkalpesh的观点,无论是关于模式还是联接

你应该能够重构

 r => r.IdProductCode_Alpha == a.IdProductCode_Alpha  && 
      r.IdProductCode_Beta == a.IdProductCode_Beta  &&
      r.IdProductCode_Gamma == a.IdProductCode_Gamma

tblProducts

进行内部连接,我同意shahkalpesh的观点,无论是关于模式还是连接

你应该能够重构

 r => r.IdProductCode_Alpha == a.IdProductCode_Alpha  && 
      r.IdProductCode_Beta == a.IdProductCode_Beta  &&
      r.IdProductCode_Gamma == a.IdProductCode_Gamma

tblProducts

进行内部连接,这是我自己做的。注意查询开始时的double
from
,然后将
Any
()替换为
Where()
子句

var results = (from a in db.tblProducts
               from g in (
                  from r in db.tblReviews
                  where r.IdUserModified == 1
                  group r by
                      new
                          {
                              r.tblAddress.IdProductCode_Alpha,
                              r.tblAddress.IdProductCode_Beta,
                              r.tblAddress.IdProductCode_Gamma
                          }
                  into productGroup
                      orderby productGroup.Count() descending
                      select
                      new
                          {
                              productGroup.Key.IdProductCode_Alpha,
                              productGroup.Key.IdProductCode_Beta,
                              productGroup.Key.IdProductCode_Gamma,
                              ReviewCount = productGroup.Count()
                          })
                  .Take(3)
           Where(g.IdProductCode_Alpha== a.IdProductCode_Alpha&& 
               g.IdProductCode_Beta== a.IdProductCode_Beta&&
               g.IdProductCode_Gamma== a.IdProductCode_Gamma)
           where a.ProductFirstName == ""
           select new {a.IdProduct, a.FullName, g.ReviewCount}).ToList();

我自己买的。注意查询开始时的double
from
,然后将
Any
()替换为
Where()
子句

var results = (from a in db.tblProducts
               from g in (
                  from r in db.tblReviews
                  where r.IdUserModified == 1
                  group r by
                      new
                          {
                              r.tblAddress.IdProductCode_Alpha,
                              r.tblAddress.IdProductCode_Beta,
                              r.tblAddress.IdProductCode_Gamma
                          }
                  into productGroup
                      orderby productGroup.Count() descending
                      select
                      new
                          {
                              productGroup.Key.IdProductCode_Alpha,
                              productGroup.Key.IdProductCode_Beta,
                              productGroup.Key.IdProductCode_Gamma,
                              ReviewCount = productGroup.Count()
                          })
                  .Take(3)
           Where(g.IdProductCode_Alpha== a.IdProductCode_Alpha&& 
               g.IdProductCode_Beta== a.IdProductCode_Beta&&
               g.IdProductCode_Gamma== a.IdProductCode_Gamma)
           where a.ProductFirstName == ""
           select new {a.IdProduct, a.FullName, g.ReviewCount}).ToList();

我认为最好将模式与示例数据结合起来&预期的输出将帮助人们形成查询。我猜模式是不完整的。你说的人是什么意思?如果是数据库,你会怎么写SQL?是的。它是不完整的,因为它都是psedoo代码,我正在尝试在飞行中这样做。我不允许在公共领域发布任何真实代码(合同等),我知道我知道:(我现在通过在评论表中添加一个人来稍微简化模式。每个评论都是由一个人发布的。每个产品可以有零到多个针对它的评论。我想最好将模式与示例数据一起发布&预期的输出将帮助人们形成查询。我猜模式是不完整的。b是什么意思y个人?如果它是一个数据库,你会如何编写SQL?是的。它是不完整的,因为它都是PSEDOO代码,我正在尝试动态地执行此操作。我不允许将任何真实代码发布到公共域(合同等…),我知道我知道:(我现在通过在评论表中添加一个人对模式进行了一点修改。每个评论都是由一个人发布的。每个产品可以有零到多个针对它发布的评论。