我有一个显示的类别类。
/// <summary>
/// A category / matrix item
/// </summary>
public class Category : BaseItem
{
public Category()
{
}
[Key]
public int CategoryId { get; set; }
[MaxLength(256, ErrorMessage = "Text cannot be longer than 256 characters")]
[Required(ErrorMessage = "Item text is required")]
public string Text { get; set; }
public int? ParentCategoryId { get; set; }
public virtual Category Parent { get; set; }
}
我正在尝试编写一个函数,该函数仅允许我获取没有子元素的元素。我正在竭尽全力围绕递归逻辑。我不反对使用循环,而只是建立一个列表,但是我希望能够做一些类似将数据联接回自身的操作,DefaultIfEmpty()
然后在联接记录为null的地方再次联接。
IE:
ID| Text | ParentId
1 | Parent | null
2 | Child | 1
3 | asdf | 2
4 | asdf | 1
我只想检索记录3和4,因为它们没有孩子。
对于完整的树函数,我已经引用了this post,但是需要更多的内容才能仅获取没有子元素的元素。
答案
由于对这个问题的一些评论,我可以使用下面的方法来完成没有子项的项目。
public IEnumerable<Category> GetChildlessCategories()
{
return WowContext.Categories
.GroupJoin(
WowContext.Categories.Where(category => category.ParentCategoryId.HasValue),
(category) => category.CategoryId,
(child) => child.ParentCategoryId.Value,
(category, children) => new { Children = children, Category = category })
.Where(a => !a.Children.Any())
.Select(a => a.Category).ToList();
}
答案 0 :(得分:0)
感谢对此问题的评论,我能够使用下面的查询来完成此操作。
public IEnumerable<Category> GetChildlessCategories()
{
return WowContext.Categories
.GroupJoin(
WowContext.Categories.Where(category => category.ParentCategoryId.HasValue),
(category) => category.CategoryId,
(child) => child.ParentCategoryId.Value,
(category, children) => new { Children = children, Category = category })
.Where(a => !a.Children.Any())
.Select(a => a.Category).ToList();
}