2015-07-21 2 views
1

Я следую за курсом по множественным значениям в построении API в .net, и я, похоже, столкнулся с проблемой с предоставленным кодом. У меня есть класс, который должен сортировать данную коллекцию на основе предоставленного запроса параметров запроса. Heres код:Проблема с типом OrderBy не может быть выведена из использования

public static class IQueryableExtensions 
{ 
    public static IQueryable<T> ApplySort<T>(this IQueryable<T> source, string sort) 
    { 
     if (source == null) 
     { 
      throw new ArgumentNullException("source"); 
     } 

     if (sort == null) 
     { 
      return source; 
     } 

     // split the sort string 
     var lstSort = sort.Split(','); 

     // run through the sorting options and create a sort expression string from them 

     string completeSortExpression = ""; 
     foreach (var sortOption in lstSort) 
     { 
      // if the sort option starts with "-", we order 
      // descending, otherwise ascending 

      if (sortOption.StartsWith("-")) 
      { 
       completeSortExpression = completeSortExpression + sortOption.Remove(0, 1) + " descending,"; 
      } 
      else 
      { 
       completeSortExpression = completeSortExpression + sortOption + ","; 
      } 

     } 

     if (!string.IsNullOrWhiteSpace(completeSortExpression)) 
     { 
      source = source.OrderBy(completeSortExpression.Remove(completeSortExpression.Count() - 1)); 
     } 

     return source; 
    } 
} 

Проблема с линии:

source = source.OrderBy(completeSortExpression.Remove(completeSortExpression.Count() - 1)); 

по какой-то причине OrderBy бросали ошибку: the type for method OrderBy cannot be inferred from the usage. Try specifying the type arguments explicitly.

ответ

3

Вы по всей видимости, с использованием динамических Linq, который позволяет вам вместо лямбда-выражений используйте строки. В этом случае, скорее всего, вам не хватает инструкции using, поэтому компилятор пытается выяснить, как преобразовать строку в лямбда. Попытайтесь добавить это (обратите внимание, что это может быть не совсем корректно, поскольку у меня нет динамического linq, установленного здесь):

using System.Linq.Dynamic; 
+0

Святое дерьмо, что и было. Вероятно, это знак того, что я должен идти домой. – user4612487

+0

Удивительно, как иногда ответ очень прост - вам просто нужно иметь четкую голову :) – DavidG