2015-09-10 4 views
0

Может кто-нибудь объяснить, почему оператор компилируется с OrderBy, но не с OrderByDescending? Мне кажется, он должен работать: https://msdn.microsoft.com/en-us/library/vstudio/bb534316(v=vs.100).aspx«System.Linq.IQueryable» не содержит определения для «OrderByDescending»

«System.Linq.IQueryable» не содержит определение для «OrderByDescending» и нет методы расширения «OrderByDescending» принимающей первый аргумент типа «System.Linq. IQueryable»может быть найдено (вы пропали без вести с помощью директивы или ссылка на сборку?)

Целевая база .Net 4.5.1.
Тип entity является System.Data.Entity.DbSet

var comparisonQuery = new ComparisonQuery(); 
comparisonQuery.Query = entity.Where(whereStatement) 

.OrderByDescending(GenOrderByFragment()). // no go 

Select(GenBigRowResultObject(elements, idFieldName)).AsNoTracking(); 
+3

Похоже, вы используете 'IQueryable' вместо' IQueryable ' –

+0

@LucasTrzesniewski В рамках eoither не существует метода расширения 'OrderBy' для' IQueryable'. –

+1

Какой тип 'GenOrderByFragment()' return? –

ответ

0

Как подробно в выше комментарий, GenOrderByFragment возвращает строку. Однако OrderByDescending ожидает Func<Entity, string>.

Например:

// this works 
Func<Person, string> keySelectorGood = p => "Name"; 
var goodQuery = entityContext.People.Where(p => p.Name == "John").OrderByDescending(keySelectorGood); 

// this DOES NOT WORK 
Func<string> keySelectorBad =() => "Name"; 
var badQuery = entityContext.People.Where(p => p.Name == "John").OrderByDescending(keySelectorBad); 
+0

Ваш ответ дает общий смысл, но моя проблема была еще проще, плохое предположение с моей стороны ... Спасибо – BlazingFrog

1

@ D Стенли ваш оригинальный комментарий послал меня в правильном направлении. Оказывается, что OrderBy был реализован через пользовательское расширение, а не расширение каркаса, как я предполагал.
Спасибо за помощь.

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