确定记录是否在LINQ to SQL中具有子项

Ver*_*kso 1 c# t-sql linq-to-sql

我在分层表中使用结构ID,名称,FK_ID,Sortkey

在LINQ to SQL中获取数据是直截了当的:

var list = from ls in db.myTable
           where ls.FK_ID == levelId
           orderby ls.sortkey ascending
           select ls;
Run Code Online (Sandbox Code Playgroud)

我可以通过链接到下一个levelId来遍历树.

但是我无法弄清楚,如果在LINQ中有办法,检查是否有孩子

我可以构建一个视图,为每条记录添加一个标志,但如果可能的话,我宁愿在LINQ中执行此操作.

甚至在SQL中添加这样一个标志的最佳做法是什么?

我检查每条记录的想法并不是性能最友好的解决方案.

use*_*736 6

如果您正确设置了外键,那么您是否没有1到多个映射属性?

即你可以写

var listWithChildren = list.Where(l => l.Children.Any());
Run Code Online (Sandbox Code Playgroud)

或走向另一个方向

var listWithParent = list.Where(l => l.FK_ID != null);
Run Code Online (Sandbox Code Playgroud)

或使用查询表达式而不是流利的

var listWithChildren = from item in list
                       where item.Children.Any()
                       select item;
Run Code Online (Sandbox Code Playgroud)

正如你在评论中提到的一个布尔标志,你可以做到

var updatedList = from item in list
                  select new 
                  {
                    Item = item,
                    HasChildren = item.Children.Any()
                  };
Run Code Online (Sandbox Code Playgroud)