在Linq中,卡在正在分组的子查询上`
我有一些Linq代码,它工作得很好。这是一个在在Linq中,卡在正在分组的子查询上`,linq,Linq,我有一些Linq代码,它工作得很好。这是一个在Where子句中有子查询的查询。此子查询正在执行groupby。效果很好 问题是我不知道如何将子查询的结果从子查询中抓取到父查询中 首先,这是密码。之后,我将解释我想要提取的数据 var results = (from a in db.tblProducts where (from r in db.tblReviews where r.IdUserModified ==
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
- 全名
- 产品名
- IdProduct
- IdProductCode_Alpha(可以为空)
- IdProductCode_Beta(可以为空)
- IdProductCode_Gamma(可以为空)
- 艾德森
干杯:)虽然我不完全理解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
进行内部连接,这是我自己做的。注意查询开始时的doublefrom
,然后将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代码,我正在尝试动态地执行此操作。我不允许将任何真实代码发布到公共域(合同等…),我知道我知道:(我现在通过在评论表中添加一个人对模式进行了一点修改。每个评论都是由一个人发布的。每个产品可以有零到多个针对它发布的评论。