2017-03-03 15 views
1

"OrderBy(x => x.Name)"でIQueryableを返す関数(X)があります。 新しいコードでX関数を使いたいのですが、このコードには順序(asc/desc)を決めるパラメータがあります。IQueryableのOrderBy方向を変更する方法

私は複数の場所で既に使用されているので、(X)を変更したくないです。

X()を取得してから「OrderBy」をキャンセルして新しい注文を適用するオプションがありますか?

(それはY.OrderBy(A => a.Name).OrderByDescending(A => a.Name似ているので、今では、例外をスロー))

「欄は、かつてよりも指定されていリストの順序は一意でなければなりません。\ r \ n命令は準備できませんでした。

+2

私はあなたがorderbydescendingとorderbyとの2つの支店を書く必要があると思います。私はより洗練されたソリューションを知りたがっています。 – TaW

+0

最後のケースではどのような例外がありますか?それは準最適ではありますが、AFAICTはまだ動作しています。 –

+0

@JonHannaの例外は '"列がリスト順に複数回指定されています。リスト順の列は一意でなければなりません。\ r \ n説得できませんでした。 – arielorvits

答えて

1

私はあなたの方法が実際に戻っていることをIOrderedQueryableの表現オブジェクトを小刻みしようとした

public void x(string order = string.empty) 
{ 
    Y.OrderBy(a => a.Name); 
    if (order == "desc") 
    { 
    Y = Y.Reverse(); 
    } 
} 
+0

シンプルですが動作しますが、一部のクエリプロバイダは([https://msdn.microsoft.com/en-us/library/bb738550(v=vs.110)]可能性があります。 aspx)not [support](https://stackoverflow.com/questions/30156183/system-notsupportedexception-when-creating-a-reversed-list)です。 – Rawling

0

使用(?私は間違っていない)が、これまでのところ運、そして私が操作するためのオプションを見ることができませんX()メソッドを変更するのではなく、System.Linq.ExpressionまたはSystem.Linq.EnumerableQueryで簡単に使用できます。

IMHO、あなたが選択する必要があります。

  • がリバース()(@Eric Lizotte応答)またはOrderByDescending()を使用してラッパー・メソッドのサムス種類を作成する - それは私が推測するが、グループ化にかかる時間が少なくなります、フィルタリングなどあなたはブランドの新しい機能を作成する必要があります。
  • X()関数本体からOrderBy()を削除し、古いコードを修正すると、順序付けられていない結果を返すことで、linq式を使用して、やったよ。

アプリケーションでORM(例:Entity Framework)を使用してマッピングされたSQL関数を気にしている場合、または自分のアプリケーションを使用している通常の方法IQueryableを返すカスタムプロバイダ?

関連する問題