C# 代码转换:EF.OrderBy作为字符串在VB中有效,但在C中无效#

C# 代码转换:EF.OrderBy作为字符串在VB中有效,但在C中无效#,c#,vb.net,linq,lambda,C#,Vb.net,Linq,Lambda,filter.OrderBy是一个字符串。假设您将输入一列的名称 查询定义如下: Dim query As IQueryable(Of MyEntityFrameworkClass) = context.Set(Of MyEntityFrameworkClass)() filter是一种POCO,它公开了各种基本类型的一些属性 在VB中,这项工作: If filter.OrderBy <> "" Then query = query.OrderBy(filter.O

filter.OrderBy
是一个字符串。假设您将输入一列的名称

查询
定义如下:

    Dim query As IQueryable(Of MyEntityFrameworkClass) = context.Set(Of MyEntityFrameworkClass)()
filter
是一种POCO,它公开了各种基本类型的一些属性

在VB中,这项工作:

    If filter.OrderBy <> "" Then query = query.OrderBy(filter.OrderBy)
导致以下编译器错误:

无法从用法推断方法“System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumerable,System.Func)”的类型参数。尝试显式指定类型参数


我知道VB在它允许的方面做得很松散,但是在C中什么是一个很好的转换呢?

您需要使用的方法是
IQueryable的扩展方法。要使用这些扩展方法,您需要引用
System.Linq
名称空间

此方法接收为参数
表达式
,因此要调用它,您需要执行以下操作:

Dim query As IQueryable(Of MyEntityFrameworkClass) = context.Set(Of MyEntityFrameworkClass)()
var result= query.OrderBy(Function(x) x.SomeProperty)

其中
SomeProperty
MyEntityFrameworkClass
entity类的属性

我怀疑您的VB代码无法使用选项Strict On编译。如果是这样的话,可能值得修复,因为生成的代码可能会在C#Hmmm中工作。它已经启用,但在原始代码中启用Option Strict不会导致编译器阻塞。它对编写的代码感到满意。然而,C#仍然不高兴。哦,好吧,值得检查一下……但是你在使用DLinq或其他第三方库吗?默认情况下,
OrderBy
IQueryable的扩展方法需要一个
表达式
作为参数,而不是
字符串
先生,您真是太棒了。这不是第三方图书馆。这是一种没有人告诉我的扩展方法。如果你把它作为一个答案,我会接受它,因为它解释了我的问题。。。
Dim query As IQueryable(Of MyEntityFrameworkClass) = context.Set(Of MyEntityFrameworkClass)()
var result= query.OrderBy(Function(x) x.SomeProperty)