2017-11-10 5 views
0

辞書のリストがそのキーに従ってソートされている実装があります。OrderBy StringComparisonで辞書のリスト

List<Dictionary<string, object>> queue = new List<Dictionary<string, object>>(); 
queue = queue.OrderBy(x => x[sortField]).ThenBy(x => x["WorkflowID"]).ToList(); 

今、私は[sortField]StringComparison.IgnoreOrdinalCaseを追加しようとしていますが、私はそれはいくつかの無効な引数を持つエラーで返されています。

ディクショナリでStringComparisonを使用することは実際にはできませんか?

ありがとうございます!

答えて

1

これは辞書とはまったく関係がありません。普通のOrderBy LINQメソッドを呼び出しています。それはちょうど辞書にあることが起こります。 x[sortField]オブジェクト、ない文字列を返すので、

queue.OrderBy(x => x[sortField], StringComparer.OrdinalIgnoreCase) 

をし、エラーを得た:

私はあなたがこれをしようとしたと仮定しています。したがって、objectに対してIComparer<string>を持つことは無効です。

queue.OrderBy(x => (string)x[sortField], StringComparer.OrdinalIgnoreCase) 
+0

はこの1つを試します:あなたが確信している場合は

は「SORTFIELD」は常に、単に値をキャストし、文字列値を指します。ありがとう! – bampie

+0

これは問題を解決します。どうもありがとう! – bampie

1

StringComparisonは、Stringのいくつかのメソッドに固有の列挙型です。一般的なLINQメソッドはその列挙型で操作する方法がありません。

代わりにStringComparerクラスを使用する必要があります。この場合、LINQが受け入れることができるのと同じ名前のIComparer<string>インスタンスが公開されます。