EF5中数据库来源的IEnumerable为何无法使用字符串参数的OrderBy?
为什么数据库获取的IEnumerable不能用字符串参数的OrderBy?
- 带字符串参数的
OrderBy("FirstName", SortDirection.Ascending)不是.NET原生LINQ的方法,它是**动态LINQ(Dynamic LINQ)**提供的扩展方法,必须额外引用System.Linq.DynamicNuGet包才能使用。 - 从EF数据库获取的
lstPerson,实际底层类型是IQueryable<Person>(只是被隐式转换为IEnumerable<Person>),如果你的项目没正确安装并引用动态LINQ包,自然调用不了这个字符串参数的OrderBy重载。 - 而
OrderBy(e => e.FirstName)是.NET原生LINQ的扩展方法,属于System.Linq.Enumerable(针对内存IEnumerable)和System.Linq.Queryable(针对EF的IQueryable),是EF和.NET框架自带的,所以不管是内存集合还是数据库返回的查询对象都能直接用。 - 补充:就算装了动态LINQ,也要注意EF5和动态LINQ的版本兼容性——动态LINQ需要能把字符串排序表达式转换成EF能解析的SQL语句,版本不兼容也可能导致无法调用。
内容的提问来源于stack exchange,提问作者Willard
相关产品推荐
相关产品推荐

