C# 使用group by的linq到sql复杂查询

C# 使用group by的linq到sql复杂查询,c#,linq-to-sql,group-by,C#,Linq To Sql,Group By,我有一张叫做“物品”的桌子 它包括以下字段: ArticleIndex、ArticleLevel、ArticleParentIndex 我做了一个查询,返回Articlevel=1的所有文章——我们称之为query1。 返回Articlevel=2的所有文章的查询-query2 我希望有一个查询,返回级别为1的文章,其中至少有一个子文章(子文章的级别为2),以及子文章的数量 到目前为止,我有以下疑问: var filteredItemsGrouped = from i in filteredIt

我有一张叫做“物品”的桌子

它包括以下字段:

ArticleIndex、ArticleLevel、ArticleParentIndex

我做了一个查询,返回Articlevel=1的所有文章——我们称之为query1。 返回Articlevel=2的所有文章的查询-query2

我希望有一个查询,返回级别为1的文章,其中至少有一个子文章(子文章的级别为2),以及子文章的数量

到目前为止,我有以下疑问:

var filteredItemsGrouped = from i in filteredItems
                           group i by i.ArticleParentIndex into g
                           select new { Node = g, NodeItemsCount = g.Count() };
然后,为了得到级别为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
            });
        }
IList节点=新列表();
foreach(FilterEditMsGrouped中的变量节点)
{
Nodes.Add(新的ArticleNodeInfo
{
Node=articlesService.GetArticleByIndex((int)(Node.Node.FirstOrDefault().ArticleParentIndex)),
nodeItemScont=node.nodeItemScont
});
}
这个过程太昂贵了。是否可以通过一个查询实现相同的结果(而不是每次都通过文章索引检索)


希望我足够清楚…

这应该可以做到:

    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()
            });