【问题标题】:Dynamic SortBy over anonymous type基于匿名类型的动态 SortBy
【发布时间】:2018-05-19 10:01:24
【问题描述】:

如何对匿名类型的列表执行SortBy 操作?

我的意思是,考虑到 enumerable 是作为参数出现的 匿名类型IEnumerable。例如:

public IQueryable<object> MyMethod(IQueryable<object> enumerable)
{
    return enumerable.SortBy("Name");
}

当然,匿名类型有Name属性

里面的SortBy应该如何实现?

【问题讨论】:

  • 匿名类型被设计为在单个方法的范围内使用。如果您想从另一种方法中使用这样的类型,则不应使用匿名类型。创建一个命名类型。

标签: c# .net linq dynamic anonymous-types


【解决方案1】:

你可以使用System.Linq.Dynamic来执行它;

public static class LinqExtensions
{
    public static IQueryable<T> OrderByName<T>(this IQueryable<T> queryable, string sortOrder = null)
    {
        if (string.IsNullOrEmpty(sortOrder))
        {
            sortOrder = "ASC";
        }
        return queryable.OrderBy(string.Format("Name {0}", sortOrder));
    }
}

用法

   var query = yourContext.Products.OrderByName("DESC");
   var productList = query.ToList();

   public class Product
   {
      public int Id { get;set; }

      public string Name { get; set; }
   }

注意:如果你使用Enum作为sortOrder参数会更好

【讨论】:

  • 好的,谢谢您的回答!这应该对 IEnumerable 有效,但是 IQueryable 怎么样?是否会使用 LINQ-To-Entities 提供程序执行排序,例如,使用 Entity Framework 在服务器中执行排序?
猜你喜欢
  • 1970-01-01
  • 2011-07-07
  • 2010-09-28
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 2012-01-17
  • 2011-04-30
  • 1970-01-01
相关资源
最近更新 更多