src/DotNetCommon.Core/Extensions/TreeExtensions.cs
(开头部分) 22KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Collections.Generic;
namespace DotNetCommon.Extensions
{
using DotNetCommon;
using DotNetCommon.Accessors;
using DotNetCommon.Data;
using System;
using System.Collections.Concurrent;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Threading.Tasks;
/// <summary>
/// <see cref="IEnumerable{T}"/>扩展类,树形结构操作
/// </summary>
public static class TreeExtensions
{
#region Remove
/// <summary>
/// 从集合中删除元素
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="collection"></param>
/// <param name="predicate"></param>
/// <returns>返回自身</returns>
public static ICollection<T> Remove<T>(this ICollection<T> collection, Func<T, bool> predicate)
{
if (collection == null) return collection;
collection.Where(predicate).ToList().ForEach(t => collection.Remove(t));
return collection;
}
#endregion
#region ToTree
/// <summary>
/// 根据指定的父节点和当前节点标记,从集合中提取为树状结构数据(原集合数据不改变)
/// </summary>
/// <typeparam name="T">集合中的数据模型</typeparam>
/// <typeparam name="TId">数据模型中表示唯一标识类型</typeparam>
/// <param name="collection"></param>
/// <param name="idSelector">如何识别当前的节点</param>
/// <param name="parentIdSelector">如何识别父节点</param>
/// <param name="rootId">父节点默认的标识值</param>
/// <returns>新构建的TreeNode集合</returns>
public static TreeNode<T>[] ToTree<T, TId>(this IEnumerable<T> collection,
Func<T, TId> idSelector,
Func<T, TId> parentIdSelector,
TId rootId = default)
=> collection.Where(x => EqualityComparer<TId>.Default.Equals(parentIdSelector(x), rootId))
.Select(x => new TreeNode<T>(x, collection.ToTree(idSelector, parentIdSelector, idSelector(x))))
.ToArray();
/// <summary>
/// 根据指定的父节点和当前节点标记,从集合中提取为树状结构数据
/// </summary>
/// <typeparam name="T">集合中的数据模型</typeparam>
/// <typeparam name="TId">数据模型中表示唯一标识类型</typeparam>
后面还有 507 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
