代码转换:作为字符串的EF.OrderBy在VB中工作但在C#中不起作用

时间:2016-04-25 15:51:39

标签: c# vb.net linq lambda

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#中有什么好的转换?

1 个答案:

答案 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)

SomePropertyMyEntityFrameworkClass实体类

的属性