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问题不应该像其他问题一样被标记为重复的问题?@EricToLookup
和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();
}