filter.OrderBy
是一个字符串。假设您将输入一个列的名称。
query
定义如下:
Dim query As IQueryable(Of MyEntityFrameworkClass) = context.Set(Of MyEntityFrameworkClass)()
filter
是一个POCO,它公开了各种基本类型的一些属性。
在VB中,这有效:
If filter.OrderBy <> "" Then query = query.OrderBy(filter.OrderBy)
C#中的相同代码:
if (!String.IsNullOrEmpty(filter.OrderBy) {query = query.OrderBy(filter.OrderBy);}
导致以下编译器错误:
方法的类型参数&#39; System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumerable,System.Func)&#39;无法从使用中推断出来。尝试明确指定类型参数。
我知道VB会在它允许的内容上获得所有松散的东西但是在C#中有什么好的转换?
答案 0 :(得分:1)
您需要使用的方法是IQueryable<T>
的{{3}}扩展方法。要使用这些扩展方法,您需要引用System.Linq
命名空间。
此方法接收参数Expression<Func<TSource, TKey>>
,因此要调用它,您需要执行以下操作:
Dim query As IQueryable(Of MyEntityFrameworkClass) = context.Set(Of MyEntityFrameworkClass)()
var result= query.OrderBy(Function(x) x.SomeProperty)
SomeProperty
是MyEntityFrameworkClass
实体类