2015-01-09 3 views
0

i new для MVC и LINQ, и я изучаю, как использовать AngularJs и MVC для нового проекта, который мне присвоен. Так что я изучаю эти технологии через онлайн-видео. Репетитор использует первый подход к коду, поэтому Visual Studio создает все необходимые файлы и базу данных, которая соответствует моделям преподавателей, а с другой стороны уже есть база данных, и я создал Api для выполнять операции REST с БД. Поэтому, когда я запускаю этот код нижеПоиск и сортировка IEumerable с использованием LINQ

 public IEnumerable<Todo> GetTodos() 
    { 

     return Models.DbStoredProcModel.GetAllTodos.GetAllTodoEntryStoredProcedure(); 
    } 

он возвращает выход JSon как этот

enter image description here

Так до этого момента, мой выход JSON совпадает с видео-учебник, даже если наш код является подход другой. Таким образом, учитель, используя этот кусок кода он написал

Репетиторы Код:

public IEnumerable<Todo> GetTodos(string q= null,string sort = null, bool desc = false, int ? limit = null, int offset =0) 
    { 
     var result = ((IObjectContextAdapter)db).ObjectContext.CreateObjectSet<Todo>(); 

     IQueryable<Todo> items = string.IsNullOrEmpty(sort) 
      ? result.OrderBy(o => o.Priority) 
      : result.OrderBy(String.Format("it. {0} {1}", sort, desc ? "DESC" : "ASC")); 

     if (!string.IsNullOrEmpty(q) && q != "undefined") 
      items = items.Where(t => t.Text.Contains(q)); 

     if (offset > 0) items = items.Skip(offset); 
     if (limit.HasValue) items = items.Take(limit.Value); 

     return items; 
    } 

это позволит ему выполнять поиск и сортировка операций по возвращаемых данных.

теперь здесь мой собственный код, пытающийся код, пытающийся сделать то же самое.

 public IEnumerable<Todo> GetTodos(string q= null,string sort = null, bool desc = false, int ? limit = null, int offset =0) 
    { 
     var result = Models.DbStoredProcModel.GetAllTodos.GetAllTodoEntryStoredProcedure(); 

     IQueryable<Todo> items = string.IsNullOrEmpty(sort) 
      ? result.OrderBy(o => o.Priority) 
      // i get the error on the line below 
      : result.OrderBy(String.Format("it. {0} {1}", sort, desc ? "DESC" : "ASC")); 

     if (!string.IsNullOrEmpty(q) && q != "undefined") 
      items = items.Where(t => t.Text.Contains(q)); 

     if (offset > 0) items = items.Skip(offset); 
     if (limit.HasValue) items = items.Take(limit.Value); 

     return items; 

    } 

однако, я получаю сообщение об ошибке сказав, что

Error:The type arguments for method 'System.Linq.Enumerable.OrderBy<TSource,TKey>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,TKey>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

Как я это исправить?

+0

Я предполагаю, что, поскольку вы используете хранимую процедуру (которая не возвращает IQueryable), попытка присвоить ее «элементам» терпит неудачу. Действительно, вы должны передавать параметры хранимой процедуре. – markpsmith

+1

Вы уверены, что существует версия расширения OrderBy, которая принимает строку? http://msdn.microsoft.com/pt-br/library/system.linq.queryable.orderby(v=vs.110).aspx – gustavodidomenico

+0

То же самое здесь, я не знаю метода «OrderBy», который принимает string в качестве параметра. Вы должны предоставить дополнительную информацию. –

ответ

-1

Изменить

result.OrderBy(String.Format("it. {0} {1}", sort, desc ? "DESC" : "ASC")) 

в

result.OrderBy<Todo,string>(String.Format("it. {0} {1}", sort, desc ? "DESC" : "ASC")) 

для сообщения более ясной ошибки.

Основная проблема, возможно, что

result.OrderBy(String.Format("it. {0} {1}", sort, desc ? "DESC" : "ASC")) 

не имеет содержательную интерпретацию в контексте приложения. Для меня это выглядит как динамический linq, требующий ссылок, которые вызывают альтернативные определения OrderBy, чем те, на которые вы ссылаетесь.

Мое предложение было бы проверить пространства имен, на которые ссылается учебник (в ссылках на проект и в верхней части этого файла), если вы пропустили какой-либо.

+2

Это ничего не изменит. Эта строка кода уже правильно выводила общие аргументы. – Servy

+0

О да, я вижу сейчас, я перейду к соответствующей строке – Kaido

+1

Это еще не ответит на вопрос. Ясно, что цель состоит в том, чтобы не использовать метод «Enumerable.OrderBy», поэтому реальная реализация даже не будет иметь двух общих аргументов. – Servy

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