2015-09-10 60 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的”可能是 (是否缺少using指令或程序集引用?)

目标框架是.Net 4.5.1
类型的entitySystem.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有不'IQueryable'在框架eoither的'OrderBy'扩展方法。 –

+1

'GenOrderByFragment()'返回什么类型? –

回答

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是通过自定义扩展实现的,而不是像我立即假定的框架扩展。
感谢您的帮助。

相关问题