2016-11-04 7 views
0

次のコードでは、ObjectDataSourceにバインドされたGridViewのデータをページングし、 "ID"列でソートするためにLINQ to SQLを使用します。Linq to SQL:任意の列名でasp gridview objectdatasourceを注文します

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パラメータで指定した列名でソートすることは可能でしょうか?

私はちょうど、このように、OrderByFunctionに

query = query.OrderBy(orderByColumnName); 

を「orderByColumnName」を置くと考えていた。しかし、それは私にこのエラーを与える:

Error CS0411 The type arguments for method 'Queryable.OrderBy(IQueryable, Expression>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

はここで関数を使用して、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

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; 
} 
関連する問題