我列出了必须由 parent 订购的产品列表,然后是该 parent 的所有 child ,然后是下一个 parent ,等等。
Product One
Child One
Child Two
Product Two
Child One
这些产品都在一个具有父ID字段的表中,子产品具有父ID,但父项可以具有空父(表示该产品是顶级产品)。
我在想以下内容:
var list = GetProductList();
var newList = new List<ProductDTO>();
var parents = from p in list
where p.Parent == null
select p.Id;
foreach (var parent in parents)
{
var tempList = new List<ProductDTO>();
tempList.Add(list.FirstOrDefault(x => x.Id == parent));
tempList.AddRange(list.Where(x => x.Parent == parent).OrderBy(x => x.Id));
newList.AddRange(tempList);
}
关于我将如何做得更清洁的任何建议?
最佳答案
给定“父项”是可为空的属性(此处假定为可为null的int)。以下应为您提供与父子相关的有序列表:
public class ProductDTO
{
public int Id { get; set; }
public string Name { get; set; }
public int? Parent { get; set; }
}
var products = new List<ProductDTO>();
products.Add(new ProductDTO() { Id = 1, Name = "Product One" });
products.Add(new ProductDTO() { Id = 2, Name = "Product Two" });
products.Add(new ProductDTO() { Id = 3, Name = "Product Three" });
products.Add(new ProductDTO() { Id = 4, Name = "Child One", Parent=1 });
products.Add(new ProductDTO() { Id = 5, Name = "Child Two", Parent = 2 });
products.Add(new ProductDTO() { Id = 6, Name = "Child One", Parent = 1 });
var ordered = products
.Where(p => p.Parent == null)
.OrderBy(p=> p.Id)
.Select(p => products
.Where(c => c.Parent == p.Id)
.OrderBy(c => c.Id))
.ToList();
关于c# - 父项和子项的订单列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22072368/