2016-05-07 12 views
0

私はこれを読んでtopicと私のコードに当てはまります。Dynamic Linq&ICompareを使用するとエラーが発生する

//listSort contains ExpandoObjects 
      List<dynamic> listSort = new List<dynamic>(listDynamic.Count); 
      foreach (var item in listDynamic) 
      { 
       dynamic objDynamic = OrderBySpecialCharacter.ConvertToExpand(item); 
       string sortValue = OrderBySpecialCharacter.GetValueInExpandoObject(objDynamic, colSortText);// "Name"); 
       objDynamic.Sort = OrderBySpecialCharacter.ConvertToACSII(sortValue.ToUpper()); 
       listSort.Add(objDynamic); 
      } 

      List<dynamic> sortedList = new List<dynamic>(); 
      if (colSort2 == null && colSort3 == null) 
      { 
       //Error in below line 
       sortedList = listSort.OrderBy(x=> x.GetReflectedPropertyValue("Sort"),new MrFourCompare<string>()).ToList(); 
      } 

    ---------------- 
    public static ExpandoObject ConvertToExpand<T>(T objInput) 
      { 
       ExpandoObject objExpand = new ExpandoObject(); 
       PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T)); 
       IDictionary<String, Object> iExpand = ((IDictionary<String, Object>)objExpand); 
       foreach (PropertyDescriptor prop in properties) 
        iExpand.Add(prop.Name, prop.GetValue(objInput)); 
       return (ExpandoObject)iExpand; 
      } 
    -------------------- 

そして私は、エラーを参照してください。

Severity Code Description Project File Line Suppression State Error CS0411 The type arguments for method 'Enumerable.OrderBy(IEnumerable, Func, IComparer)' cannot be inferred from the usage. Try specifying the type arguments explicitly. DemoDynamicObject C:\Users\MrFour-IT\Desktop\DemoDynamicObject\DemoDynamicObject\OrderBySpecialCharacter.cs 154 Active

私はそれを修正する方法がわかりません!私を助けてください!おかげ

+0

これは私があなたの助けのために http://stackoverflow.com/questions/12350965/dynamic-linq-icompare –

答えて

0

あなたは、このコードのようIComparerを持っている場合は、次の理由IComparerの実装で

sortedList = listSort.OrderBy(x=> x.GetReflectedPropertyValue("Sort"),new MrFourCompare<string>()).ToList(); 

sortedList = listSort.OrderBy(x=> x.GetReflectedPropertyValue("Sort"),new MrFourCompare()).ToList(); 

へ:あなたはこの行を変更する最も

public class MrFourCompare: IComparer<String> 
{ 
    public int Compare(string x, string y) 
    { 
     return string.Compare(x, y); 
    } 
} 

はあなた言及リンクに従ってそれを文字列に設定します。

編集:あなたが最もStringまたはIntのような正確な型に並べ替えプロパティをキャスト動的な値のSortプロパティでソートしたいので、もし

IComparerは、Dynamicすることはできません。

sortedList = listSort.OrderBy(x=> (string)x.GetReflectedPropertyValue("Sort"),new MrFourCompare()).ToList(); 
+0

感謝を読んトピックです。私はそれを試してみました。しかし、エラーは「使用法から推論できません。タイプ引数を明示的に指定してください。」まだ表示されます。あなたは私がそのエラーを解決するのを手伝ってくれますか? –

+0

ここにあなたの 'IComparer'実装を入れてください – Damirchi

+0

これは私の比較です。 パブリッククラスMrFourCompare:たIComparer {公共のint(列X、列Y) {リターンstring.Compare(x、y)を比較します。 } }テスト用です。私は後でそれを変更します。文字列型のプロパティの変更値をソートするには、結果が同じSQLサーバーが必要です。例: –

関連する問題