我有一个像这样的模型:
public class MyEntity
{
public int Id { get; set; }
public string Name { get; set; }
public int? ParentId { get; set; }
public string FullBreadcrumb { get; set; }
}
您可以使用如下形式:
public IEnumerable<string> GetBreadcrumbs(IEnumerable<MyEntity> entities, int? parentId = null)
{
var parents = entities.Where(x => x.ParentId == parentId);
var children = entities.Where(x => x.ParentId != parentId);
foreach (var parent in parents)
{
yield return parent.Name;
foreach (var trail in GetBreadcrumbs(children, parent.Id))
yield return (parent.Name + " > " + trail);
}
}
这实际上确实很好,但是我需要的不是返回IEnumerable字符串,而是希望它返回填充了FullBreadcrumb的IEnumberable MyEntity。
可能只是太晚了,我很累,但是我很难把它付诸实践。我对收益也不熟悉。任何帮助都是非常有帮助的。
我实际上可以自己解决此问题,但如果有人想知道我是这样做的:
public static IEnumerable<MyEntity> GetBreadcrumbs(IEnumerable<MyEntity> entities, int? ParentNodeId = null)
{
var childNodes = entities.Where(x => x.ParentCategoryId == ParentNodeId);
foreach (var currentNode in childNodes)
{
var parent = entities.SingleOrDefault(x => x.Id == currentNode.ParentCategoryId);
var childrens = entities.Where(x => x.ParentCategoryId == currentNode.Id);
currentNode.FullBreadcrumb = string.Format("{0}{1}", (parent == null ? null : parent.FullBreadcrumb + " > "), currentNode.Name);
yield return currentNode;
foreach (var trail in GetBreadcrumbs(entities, currentNode.Id))
{
yield return trail;
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句