对于以下代码,我使用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>
答案 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;
}