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