Linq to SQL:通过任意列名命令asp gridview objectdatasource

时间:2016-11-04 09:43:21

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

对于以下代码,我使用LINQ to SQL来为绑定到ObjectDataSource的GridView的页面数据进行分页,并按" ID"列。

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参数中指定的列名进行排序吗?

我以为我可以把&#34; orderByColumnName&#34;在OrderByFunction中,像这样,

query = query.OrderBy(orderByColumnName);

但它给了我这个错误:

  

错误CS0411方法的类型参数&#39; Queryable.OrderBy(IQueryable,Expression&gt;)&#39;无法从使用中推断出来。尝试明确指定类型参数。

这里是使用函数的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>

1 个答案:

答案 0 :(得分: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;
}