实体框架Linq递归搜索到列表
本文关键字:列表 搜索 递归 框架 Linq 实体 | 更新日期: 2023-09-27 18:27:48
这是在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);
}
}
你将以这种方式执行:
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();