動的な文字列パラメータを使用して OrderBy を実行するにはどうすればよいでしょうか? 質問する

動的な文字列パラメータを使用して OrderBy を実行するにはどうすればよいでしょうか? 質問する

私はこれをやりたいです:

var orderBy = "Nome, Cognome desc";

var timb = time.Timbratures.Include("Anagrafica_Dipendente")
    .Where(p => p.CodDipendente == 1);

if(orderBy != "")
    timb = timb.OrderBy(orderBy);

OrderBy文字列パラメータを受け入れるオーバーロードはありますか?

ベストアンサー1

単純な LINQ-to-objects を使用しており、外部ライブラリに依存したくない場合は、目的を達成するのは難しくありません。

このOrderBy()句は、Func<TSource, TKey>ソース要素からソート キーを取得する を受け入れます。この関数はOrderBy()句の外側で定義できます。

Func<Item, Object> orderByFunc = null;

その後、並べ替え基準に応じて異なる値を割り当てることができます。

if (sortOrder == SortOrder.SortByName)
  orderByFunc = item => item.Name;
else if (sortOrder == SortOrder.SortByRank)
  orderByFunc = item => item.Rank;

次に並べ替えることができます:

var sortedItems = items.OrderBy(orderByFunc);

この例では、ソース タイプが であり、ItemプロパティNameとを持っていることを前提としていますRank

この例では、並べ替えることができるプロパティ タイプを制限しないことに注意してくださいTKeyObject関数が値タイプ ( などInt32) を返す場合、並べ替え時にボックス化され、非効率的になります。特定の値タイプに制限できる場合は、TKeyこの問題を回避できます。

おすすめ記事