vb.net中的linq表达式

vb.net中的linq表达式,linq,lambda,Linq,Lambda,任何人都可以把下面的c代码翻译成vb。我尝试过telarik代码转换器,但在expression.call中遇到问题,它根本无法编译 private static IOrderedQueryable<T> OrderingHelper<T>(IQueryable<T> source, string propertyName, bool descending, bool anotherLevel) { ParameterExpression param

任何人都可以把下面的c代码翻译成vb。我尝试过telarik代码转换器,但在expression.call中遇到问题,它根本无法编译

private static IOrderedQueryable<T> OrderingHelper<T>(IQueryable<T> source, string propertyName, bool descending, bool anotherLevel)
{
    ParameterExpression param = Expression.Parameter(typeof(T), string.Empty);
    MemberExpression property = Expression.PropertyOrField(param, propertyName);
    LambdaExpression sort = Expression.Lambda(property, param);

    MethodCallExpression call = Expression.Call(    
        typeof(Queryable),
        (!anotherLevel ? "OrderBy" : "ThenBy") + (descending ? "Descending" : string.Empty),
        new[] { typeof(T), property.Type }, // error line
        source.Expression,
        Expression.Quote(sort));

    return (IOrderedQueryable<T>)source.Provider.CreateQuery<T>(call);
}
私有静态IOrderedQueryable OrderingHelper(IQueryable源、字符串属性名称、bool降序、bool其他级别)
{
ParameterExpression param=Expression.Parameter(typeof(T),string.Empty);
MemberExpression属性=Expression.PropertyOrField(参数,propertyName);
LambdaExpression sort=Expression.Lambda(属性,参数);
MethodCallExpression调用=表达式调用(
类型(可查询),
(!anotherLevel?“OrderBy”:“ThenBy”)+(降序?“降序”:string.Empty),
新[]{typeof(T),property.Type},//错误行
来源.表达式,
Expression.Quote(sort));
返回(IOrderedQueryable)source.Provider.CreateQuery(调用);
}
谢谢
Thurein

您好,谢谢您的回复,但我在这一行“new(){getType(T),property.Type}”上仍然收到编译错误,表示该类型是预期的。抱歉,这是在没有编译器的情况下发生的。这是一个新版本。VB 9:new Type(){GetType(T),[property].Type}。VB 10:{GetType(T),[property].Type}嗨,我知道了,实际上我把new()改成了new Type(),我不确定它是否正确,但它确实解决了我的编译错误,工作正常,谢谢。
Function foo(Of T)(ByVal source As IQueryable(Of T), ByVal propertyName As String, ByVal descending As Boolean, ByVal anotherLevel As Boolean) As Object
    Dim param = Expression.Parameter(GetType(T), String.Empty)
    Dim [property] = Expression.PropertyOrField(param, propertyName)
    Dim sort = Expression.Lambda([property], param)

    Dim [call] = Expression.Call(
     GetType(Queryable),
     If(Not anotherLevel, "OrderBy", "ThenBy") & If(descending, "Descending", String.Empty),
     New Type() {GetType(T), [property].Type},
     source.Expression,
     Expression.Quote(sort))

    Return CType(source.Provider.CreateQuery(Of T)([call]), IOrderedQueryable(Of T))

End Function