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