首页 >后端开发 >C++ >如何实现' IEnumerable”和`ienumerable'的动态LINQ订购?

如何实现' IEnumerable”和`ienumerable'的动态LINQ订购?

Susan Sarandon
Susan Sarandon原创
2025-02-02 22:36:12113浏览

How to Implement Dynamic LINQ Ordering for `IEnumerable` and `IEnumerable`?

IEnumerable<T> / IQueryable<T> 的动态LINQ排序

IEnumerable<T> 的扩展方法

虽然动态LINQ为IQueryable<T>排序提供了便捷的语法,但类似的功能并不直接适用于IEnumerable<T>。为了解决这个问题,您可以使用以下扩展方法,为IEnumerable<T>添加OrderByOrderByDescendingThenByThenByDescending功能:

<code class="language-csharp">public static IOrderedQueryable<T> OrderBy<T>(
    this IQueryable<T> source,
    string property)
{
    return ApplyOrder<T>(source, property, "OrderBy");
}

public static IOrderedQueryable<T> OrderByDescending<T>(
    this IQueryable<T> source,
    string property)
{
    return ApplyOrder<T>(source, property, "OrderByDescending");
}

public static IOrderedQueryable<T> ThenBy<T>(
    this IOrderedQueryable<T> source,
    string property)
{
    return ApplyOrder<T>(source, property, "ThenBy");
}

public static IOrderedQueryable<T> ThenByDescending<T>(
    this IOrderedQueryable<T> source,
    string property)
{
    return ApplyOrder<T>(source, property, "ThenByDescending");
}

static IOrderedQueryable<T> ApplyOrder<T>(
    IQueryable<T> source,
    string property,
    string methodName)
{
    // 为简洁起见,省略实现
}</code>

IEnumerable<T>一起使用

要将这些扩展方法与IEnumerable<T>一起使用,您可以使用AsQueryable扩展方法将其转换为IQueryable

<code class="language-csharp">IEnumerable<T> items = ...;
IQueryable<T> queryableItems = items.AsQueryable();

var orderedItems = queryableItems.OrderBy("Property");</code>

使用IEnumerable<dynamic>进行动态排序

除了基本的排序方法外,您还可以使用IEnumerable<dynamic>上的动态排序来进一步扩展功能。这是一个示例:

<code class="language-csharp">using System.Dynamic;

public static IOrderedEnumerable<dynamic> OrderBy(
    this IEnumerable<dynamic> source,
    string property)
{
    // 为简洁起见,省略实现
}

// 其他排序方法 (OrderByDescending, ThenBy, ThenByDescending)

IEnumerable<dynamic> data = ...;

var orderedData = data.OrderBy("Property");</code>

以上是如何实现' IEnumerable”和`ienumerable'的动态LINQ订购?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn