1

我在具有结构 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;

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

但我不知道,如果 LINQ 中有办法检查是否有孩子

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

在 SQL 中添加这样一个标志的最佳实践是什么?

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

4

1 回答 1

7

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

即你可以写

var listWithChildren = list.Where(l => l.Children.Any());

或走向另一个方向

var listWithParent = list.Where(l => l.FK_ID != null);

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

var listWithChildren = from item in list
                       where item.Children.Any()
                       select item;

正如您在评论中要求布尔标志一样,您可以这样做

var updatedList = from item in list
                  select new 
                  {
                    Item = item,
                    HasChildren = item.Children.Any()
                  };
于 2013-08-21T01:26:41.423 回答