【问题标题】:Can't figure out how to use JqGrid correctly with Asp.net MVC and Linq to Sql无法弄清楚如何正确使用 JqGrid 与 Asp.net MVC 和 Linq to Sql
【发布时间】:2010-07-14 14:40:16
【问题描述】:

在我的 asp.net mvc 项目中让我的 jqgrids 与 linq to sql 一起正常工作时,我似乎遇到了问题。

我遇到的问题是正确使用 sidx 和 sord 参数。我发现的大多数资源都说要做类似

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

在 Visual Studio 2010(.net 4 项目,MVC2)中,我在 order by 中遇到编译错误,因为似乎没有 linq orderby 扩展只接受一个字符串作为参数,他们都想要一个委托/lamda。

如何在我的应用中实现排序,以便我的网格可以按列正确排序?

【问题讨论】:

    标签: c# linq jqgrid jqgrid-asp.net


    【解决方案1】:

    您可以创建将字符串转换为 lambda 表达式的方法。 我没有对此进行测试,但可能是这样的:

    private Expression<Func<Person, T>> orderbyExpression(string column)
    {
        switch (column)
        {
           case: "Name":
               return p => p.Name;
    
           case: "Sex":
              return p => p.Sex;
        }
    
    }
    

    您还必须单独整理 asc/desc 设置

    【讨论】:

    • 我希望有一些更具可扩展性的东西:/
    • 我想你可以尝试使用反射来获取每种情况下的属性,尽管这可能行不通,因为 Linq 对它将接受哪些表达式非常挑剔
    【解决方案2】:

    如果添加“使用 System.Linq.Dynamic;”您粘贴的代码应该可以正常工作。

    这里有一个小注意事项:OrderBySkip 是一起的,所以如果你想跳到一条记录,应该指定 OrderBy。我通过检查是否有发布的 orderby 字段参数解决了这个问题。

    using System.Linq.Dynamic;
    ...
    
    {
        var questions = context.Questions;
        if (!string.IsNullOrEmpty(sidx))
            questions = questions.OrderBy(sidx + " " + sord).Skip(pageIndex * pageSize);
    
        return questions.Take(pageSize);
    }
    

    这个话题也很有用: jqGrid, Problem with sorting Linq expression

    【讨论】:

      猜你喜欢
      • 2019-10-26
      • 1970-01-01
      • 2022-09-28
      • 2019-03-12
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多