繁体   English   中英

Linq查询自引用对象以获取无子元素

[英]Linq Query For Self Referencing Object to Get Childless Elements

我有一个类别类,如图所示。

/// <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()然后再次连接,其中join记录为null。

IE: 
ID| Text   | ParentId
1 | Parent | null
2 | Child  | 1
3 | asdf   | 2
4 | asdf   | 1

我只想检索记录3和4,因为他们没有孩子。

我已经为完整的树函数引用了这篇文章 ,但还需要更多的东西才能获得无子元素。

感谢对此问题的评论,我可以使用下面的查询来完成此操作。

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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM