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中添加这样一个标志的最佳做法是什么?
我检查每条记录的想法并不是性能最友好的解决方案.
如果您正确设置了外键,那么您是否没有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)