2016-05-07 7 views
0

Ich lese diese topic und gelten für meinen Code.Fehler bei der Verwendung 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; 
      } 
    -------------------- 

Und ich sehe Fehler:

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

Ich weiß nicht, wie es zu beheben! Bitte hilf mir! Dank

+0

Dies ist Thema, das ich http://stackoverflow.com/questions/12350965/dynamic-linq-icompare –

Antwort

0

Wenn Ihr haben IComparer wie diesem Code:

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

zu

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

weil bei der Umsetzung von IComparer:

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

nach Ihrem genannten Link Sie diese Zeile ändern die meisten Sie stellen es auf String ein.

Edit:

IComparer nicht Dynamic sein, wenn Sie also von Sort-Eigenschaft von dynamischen Wert sortieren wollen die meisten Sie sortieren Eigenschaft auf genaue Art wie String oder Int gegossen.

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

Dank für Ihre Hilfe lesen. Ich versuchte es. Der Fehler "kann jedoch nicht aus der Verwendung abgeleitet werden. Versuchen Sie, die Typargumente explizit anzugeben." erscheint immer noch. Könnten Sie mir helfen, diesen Fehler zu lösen? –

+0

Setzen Sie Ihre 'IComparer'-Implementierung hier – Damirchi

+0

Dies ist mein Vergleich. Öffentliche Klasse MrFourCompare: IComparer { public int Vergleichen (Zeichenfolge x, Zeichenfolge y) { Rückgabezeichenfolge.Compare (x, y); } } Es ist für den Test. Ich werde es später ändern. Ich brauche den Wert der Eigenschaft ändern mit String-Typ zu sortieren hat den gleichen SQL-Server. Zum Beispiel: –

Verwandte Themen