14

重複の可能性:
動的 LINQ OrderBy

  switch (sort) {
                case "Title":
                    queryResults = queryResults.OrderBy(r => r.Title);
                    break;
                default:
                    queryResults = queryResults.OrderBy(r => r.LastName);
                    break;

上記のスイッチブロックを取り除く方法はありますか?

次のようなことができますか?

queryResults = queryResults.OrderBy(r => r."sort");
or
queryResults = queryResults.OrderBy(r => r.sort);
4

3 に答える 3

8

これを完全に動的に実行したい場合は、リフレクションを使用できます(簡単な例)。

string prop = "Title";
var q = queryResults.OrderBy(x => x.GetType().GetProperty(prop).GetValue(x, null));

とはいえ、これが最も良い解決策だとは思いません。これが本当に意味があるかどうかは、プロパティ名をどこから取得するか(リフレクションから取得するかどうか)と、プロパティがいくつあるかによって異なります。

于 2012-05-22T12:33:37.570 に答える
5

これはそれを行う必要があります

queryResults = queryResults.OrderBy(r => sort == "Title" ? r.Title : r.LastName)
于 2012-05-22T12:35:18.540 に答える
4

DynamcLinqを使用できます。1年以上触っていませんでしたが、期待通りの結果が得られました。コードは次のように変更されます。

queryResults = queryResults.OrderBy(sort);

ああ、これもNuGetパッケージです

于 2012-05-22T12:41:00.313 に答える