【问题标题】:Linq to SQL: order an asp gridview objectdatasource by an arbitrary column nameLinq to SQL:按任意列名订购 asp gridview objectdatasource
【发布时间】:2017-03-18 02:19:48
【问题描述】:

对于以下代码,我使用 LINQ to SQL 为绑定到 ObjectDataSource 并按“ID”列排序的 GridView 分页数据。

public IQueryable<MYDATATYPE> GetMYDATATYPE(int maximumRows, int startPageIndex, int startRowIndex, string orderByColumnName)
{
    // page query
    var query = Context.MYDATATYPEs.Skip(startRowIndex).Take(maximumRows);

    // ordering by the ID column
    query = query.OrderBy(x => x.ID);

    return query;
}

是否可以不按 ID 列排序,而是按 orderByColumnName 参数中指定的列名排序?

我想我可以像这样将“orderByColumnName”放在 OrderByFunction 中,

query = query.OrderBy(orderByColumnName);

但它给了我这个错误:

错误 CS0411 方法“Queryable.OrderBy(IQueryable, Expression>)”的类型参数无法从用法中推断出来。尝试明确指定类型参数。

这是使用该函数的 ASP 对象数据源:

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
     SelectMethod="GetMYDATATYPE" SelectCountMethod="GetMYDATATYPECount" 
     TypeName="Paging.MyData" EnablePaging="true" 
     SortParameterName="OrderByColumName">
   <SelectParameters>
     <asp:Parameter Name="maximumRows" Type="Int32" />
     <asp:Parameter Name="startPageIndex" Type="Int32" />
     <asp:Parameter Name="startRowIndex" Type="Int32" />
   </SelectParameters>
</asp:ObjectDataSource>

【问题讨论】:

    标签: c# asp.net linq gridview linq-to-sql


    【解决方案1】:

    使用 Linq To SQL,您无法做您想做的事。我总是添加一个 switch 语句来扩展我的查询,具体取决于字符串变量包含的内容。这很难看,但我还没有找到任何其他解决方案......

    switch (orderByColumnName){
        case "column1":
             query = query.OrderBy(p => p.column1);
             break;
        case "column2":
             query = query.OrderBy(p => p.column2);
             break;
        default:
             query = query.OrderBy(p => p.column1);
             break;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      相关资源
      最近更新 更多