我有一张名为“文章”的表。
它包括以下字段:
ArticleIndex,ArticleLevel,ArticleParentIndex。
我查询了返回ArticleLevel = 1的所有文章 - 让我们称之为query1。 返回ArticleLevel = 2 - query2。
的所有文章的查询我希望有一个查询,它会返回level = 1的文章,至少有一篇子文章(子文章的级别为2),以及子文章的数量。
到目前为止,我有以下查询:
var filteredItemsGrouped = from i in filteredItems
group i by i.ArticleParentIndex into g
select new { Node = g, NodeItemsCount = g.Count() };
然后,为了获得level = 1的实际文章,我这样做:
IList<ArticleNodeInfo> Nodes = new List<ArticleNodeInfo>();
foreach (var node in filteredItemsGrouped)
{
Nodes.Add(new ArticleNodeInfo
{
Node = articlesService.GetArticleByIndex((int)(node.Node.FirstOrDefault().ArticleParentIndex)),
NodeItemsCount = node.NodeItemsCount
});
}
这个过程太贵了。是否可以通过一个查询实现相同的目标(而不是每次都通过文章索引进行检索)?
希望我足够清楚......
答案 0 :(得分:1)
这应该可以解决问题:
var articlesLevel1 = (
from al1 in Articles
join al2 in Articles on new
{
al1.ArticleIndex,
ArticleLevel = 2
} equals new
{
ArticleIndex = al2.ArticleParentIndex,
al2.ArticleLevel
} into g_al2
where (al1.ArticleLevel == 1) && g_al2.Any()
select new
{
ArticlesLevel1 = al1,
ArticlesLevel2Count = g_al2.Count()
});