如何使用LINQ c#根据子表中的引用计数对父表数据进行排序?

acruukt9  于 2022-12-15  发布在  C#
关注(0)|答案(2)|浏览(180)

我想按照父表在另一个子表中的引用计数(外键)对父表进行排序。
父表

  • 身份证
  • 姓名

子表

  • 身份证
  • 父ID
  • 细节

我想只选择按ChildTbl中引用计数排序的parentTbl列,方法是如下所示连接它们:

var parents = from p in context.parentTbl
          join c in context.ChildTbl on p.Id equals c.parentId
          orderby count(c.parentId)
          select distinct p;

我想我也需要在订购前对它们进行分组,但我不确定如何实现这一点。

注意:没有导航的父子属性。只有子表中的一个外键(我提到的),我想按该外键列计数

xv8emn3q

xv8emn3q1#

请看这个。

// Query the parentTbl table and join it to the childTbl table
var query = from p in parentTbl
            join c in (
               from c2 in childTbl
               group c2 by c2.parentId into g
               select new { parentId = g.Key, referenceCount = g.Count() }
            ) on p.Id equals c.parentId
            orderby c.referenceCount descending
            select p;

// Execute the query and print the sorted records
foreach (var p in query)
{
   Console.WriteLine($"{p.Name}: {p.ReferenceCount} references");
}

和SQL版本

SELECT p.*
FROM parentTbl p
JOIN (
   SELECT parentId, COUNT(*) AS referenceCount
   FROM childTbl
   GROUP BY parentId
) AS c ON p.Id = c.parentId
ORDER BY c.referenceCount DESC;
wj8zmpe1

wj8zmpe12#

这样有用吗?

// sort parents by number of children using linq
   var sortedParents = from p in parents
                       join c in children on p.id equals c.parentId into pc
                       orderby pc.Count() descending
                       select new { parent = p, children = pc };

相关问题