2016-05-07 8 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 как этот код:

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

согласно вашей упомянутой ссылке вы больше всего изменить эту строку:

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

к

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

потому, что в реализации IComparer вы установите его на строку.

Edit:

IComparer не может быть Dynamic, так что если вы хотите сортировать по Sort свойства динамического значения вы наиболее отбрасываемой сортировка свойства конкретного типа, как String или Int.

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

Благодарим за вашу помощь. Я попробовал. Однако ошибка «не может быть выведена из использования. Попробуйте явно указать аргументы типа». все еще появляется. Не могли бы вы помочь мне решить эту ошибку? –

+0

введите здесь свою реализацию «IComparer» – Damirchi

+0

Это мое сравнение. Публичный класс MrFourCompare: IComparer { public int Сравнить (строка x, строка y) { return string.Compare (x, y); } } Это для испытания. Я изменю его позже. Мне нужно изменить значение свойства со строковым типом, чтобы отсортировать результат с тем же SQL-сервером. Например: –

 Смежные вопросы

  • Нет связанных вопросов^_^