【问题标题】:Sorting a List<T> using LINQ使用 LINQ 对 List<T> 进行排序
【发布时间】:2011-04-10 18:28:42
【问题描述】:
List<DatsWussup.Models.Message> messages = mc.GetMessages();
List<DatsWussup.Models.JQGridMessage> gridMessages = FormatMessages(messages);

int pageIndex = Convert.ToInt32(page) - 1;
int pageSize = rows;
int totalRecords = gridMessages.Count;
int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);

var questions = gridMessages
    .OrderBy(sidx + " " + sord)
    .Skip(pageIndex * pageSize)
    .Take(pageSize);

所以我在这里跟随 JqGrid 和 MVC 指南:http://haacked.com/archive/2009/04/14/using-jquery-grid-with-asp.net-mvc.aspx,在他添加排序/分页的步骤中,我从博客中获取了上述代码。

现在,您可能仅通过查看代码就可以看出我想要做什么,尤其是如果您熟悉一起使用 JqGrids 和 MVC 的话。但是,我收到了这个错误:

方法'System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumerable, System.Func)' 不能 从用法推断。尝试 指定类型参数 明确的。

当我尝试编译上述代码时。我不太擅长 LINQ 或任何代表,我能得到一点帮助吗?

谢谢!

【问题讨论】:

  • sidxsord 的类型是什么,在哪里声明?
  • 它们都是字符串,它们作为参数从前端发送到此代码所在的函数。此代码在控制器函数中。

标签: c# .net linq list sorting


【解决方案1】:

OrderBy() 接受 Func&lt;TSource, TKey&gt; 委托、表达式 Expression&lt;Func&lt;TSource, TKey&gt;&gt; 或者如果您有 LINQ,则接受字符串。该博客提到您需要 LINQ 并链接到 download pageScottGu's article。显然你没有。

下载它,将LinqSamples\DynamicQuery\DynamicQuery\Dynamic.cs 添加到您的项目并使用System.Linq.Dynamic 命名空间,它应该可供您使用。

【讨论】:

    【解决方案2】:

    OrderBy 期待一个 lambda 表达式,可能是这样的:

    var questions = gridMessages
        .OrderBy(m => m.sidx + " " + m.sord)
        .Skip(pageIndex * pageSize)
        .Take(pageSize);
    

    【讨论】:

    • sidx 和 sord 是前端 jqgrid 传递给我的属性。 sidx 是要排序的列名,sord 是排序类型(asc 或 desc)。该模型没有这些属性,所以这不起作用=/
    • 那你也不能那样做,那你需要动态构建一个表达式。
    • 这个人在我帖子中链接的博客中的示例中是如何做到的?
    • @Scott:正如那篇文章所述,他使用了Dynamic Linq Query library,它允许基于字符串构建 LINQ 查询。
    猜你喜欢
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 2010-10-16
    相关资源
    最近更新 更多