Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于自引用对象以获取无子元素的Linq查询_C#_Linq_Recursion_Lambda - Fatal编程技术网

C# 用于自引用对象以获取无子元素的Linq查询

C# 用于自引用对象以获取无子元素的Linq查询,c#,linq,recursion,lambda,C#,Linq,Recursion,Lambda,我有一个类别类,如图所示 /// <summary> /// A category / matrix item /// </summary> public class Category : BaseItem { public Category() { } [Key] public int CategoryId { get; set; } [MaxLength(256, ErrorMessage = "Text cann

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

/// <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; }

}
我只想检索记录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();
}
public IEnumerable GetChildlessCategories()
{
返回WowContext.Categories
.GroupJoin(
WowContext.Categories.Where(category=>category.ParentCategoryId.HasValue),
(类别)=>category.CategoryId,
(child)=>child.ParentCategoryId.Value,
(类别,子类)=>new{children=children,category=category})
.Where(a=>!a.Children.Any())
.Select(a=>a.Category).ToList();
}

您可以这样做:@Eric您使用的解决方案与复制品基本相同。该解决方案对您有效就是证明该问题实际上是一个重复的问题。@Servy在这种情况下,您可以使用linq标记回答问题,并基本上将90%的问题标记为重复问题。毕竟,大多数问题都只是其他问题的衍生问题questions@l--------“是的,非常接近它是的。可能不是字面上的90%,而是一个非常高的数字。为什么你认为LINQ问题不应该像其他问题一样被标记为重复的问题?@Eric
ToLookup
GroupJoin
在功能上执行相同的行为。组联接的代码要多一些,但在这里的行为并没有明显的不同。
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();
}