次のような LINQ クエリの式ツリーを構築する必要があります。
collection.OrderBy(e => ((MyObject)e["PropertyIndex"]).dictionary.Where(k => k.Key == "keyName").Select(k => k.Value).Single());
OrderBy メソッドをチェーンする方法を説明するこのリンクを見ました。Expression Tree を使用して OrderBy 内に Where を追加する方法がわかりません。
アップデート:
メモリ内のデータを動的にソートする必要があります。したがって、linq クエリは次のようになります。
collection.OrederBy(field1).ThenByDescending(field2).ThenBy(field3)
いくつのフィールドで並べ替える必要があるかは、実行時にしかわかりません。fieldX のいずれかを複合オブジェクトにすることができます。もちろん、オブジェクトのタイプは実行時に認識されます。オブジェクトの 1 つは、上記の LINQ クエリに見られるような構造を持っています。辞書があり、特定のキーをソートする必要があります。私の場合、辞書には次のようなローカライズされたデータが含まれています。
{{"en-US", "word (en)"}, {"es-ES", "word (es)"} , ....}
特定の言語で並べ替える必要があります。