C# 实体框架Linq对列表的递归搜索

C# 实体框架Linq对列表的递归搜索,c#,entity-framework,linq,recursion,C#,Entity Framework,Linq,Recursion,哪种方法是获取Linq上递归搜索列表的最佳方法 例如,如果我有一个Category类,它可以将其他类别作为子类别,并且这些类别将产品作为其子类别,比如 Category1 > Product1 > Product2 Category2 > Product3 > Category21 > Product31 > Product32 > Product

哪种方法是获取Linq上递归搜索列表的最佳方法

例如,如果我有一个Category类,它可以将其他类别作为子类别,并且这些类别将产品作为其子类别,比如

Category1 > Product1
          > Product2

Category2 > Product3
          > Category21 > Product31
                       > Product32
          > Product4

等等,我需要返回列表中所有类别和产品的ID。有没有办法做到这一点?

首先,在您的情况下,模型应该是这样的:

public class Product
{
    public int id { get; set; }
    public string name { get; set; }

    public virtual Category Category { get; set; }
    public int CategoryID { get; set; }
}

public class Category
{
    public int id { get; set; }
    public string name { get; set; }

    public virtual ICollection<Product> Products { get; set; }
    public virtual ICollection<Category> Categories { get; set; }

    public virtual Category Parent { get; set; }
    public int? ParentID { get; set; }

    private List<int> GetIds(Category category)
    {            
        var list = Products == null ? new List<int>() : Products.Select(x => x.id).ToList();
        if (Categories != null)
            Categories.ToList().ForEach(x => {
                list.Add(x.id);
                list.AddRange(x.GetIds(x));
            }
        );            
        return list;
    }

    public List<int> GetIds()
    {
        return GetIds(this);
    }
}

有。你搜索过“递归linq”或类似的东西吗?@DStanley是的,我搜索过,但我只需要一个包含所有ID的列表,而不是对象层次结构。继续搜索,尝试应用这些解决方案,并在遇到问题时问特定的问题。没有解决您的查询的“灵丹妙药”,因此您需要显示您尝试了什么,并提供有关数据结构的更多详细信息,以获得有效答案。您想要两个不同表/实体的ID的唯一列表吗?@E-Bat没错。
var db = new DataContext();
//switching on "LazyLoading" is extremely necessary
db.Configuration.LazyLoadingEnabled = true;

var first = db.Categories.Where(x => x.id == 5).First();
var ids = first.GetIds();