繁体   English   中英

如何将此C#lambda表达式转换为VB.Net?

[英]How do I convert this C# lambda expression to VB.Net?

我试图将我多次使用的C#lambda转换为VB.Net,但我似乎无法弄清楚要使用的正确语法。 这是原始的C#代码:

public override IQueryable<E> Select<E>(params System.Linq.Expressions.Expression<Func<E, object>>[] includeExpressions)
{
    IQueryable<E> result = null;

    if (includeExpressions.Any())
    {
        result = includeExpressions.Aggregate<Expression<Func<E, object>>, IQueryable<E>>(Context.Set<E>(), (current, expression) => current.Include(expression));
    }

    return result;
}

我已经使用了一个在线代码转换器,并试图自己重新编写该函数,但我没有得到任何结果。 这是我提供前一个方法时代码转换器输出的内容:

Public Overrides Function [Select](Of E As Class)(ParamArray includeExpressions As Expression(Of Func(Of E, Object))()) As IQueryable(Of E)
    Dim result As IQueryable(Of E) = Nothing

    If includeExpressions.Any() Then
        result = includeExpressions.Aggregate(Of Expression(Of Func(Of E, Object)), IQueryable(Of E))(Context.[Set](Of E)(), Function(current, expression) current.Include(expression))
    End If

    Return result
End Function

我相信罪魁祸首如下:

Function(current, expression) current.Include(expression)

我不认为代码转换器(和我手动尝试的时候)正确格式化这个lambda表达式。

以下是博客文章的链接,其中介绍了使用方法和目的,以便您了解更多详细信息: http//www.viamacchina.com/2014/01/generic-repositories-including-includes.html

该函数不能在VB.Net中编译。 我收到一个错误,即includeExpressions.Aggregate调用没有正确数量的参数。 我相信这是由于第二个参数不是(lambda)没有正确编译并返回其结果。

我认为如果你关闭Strict,它应该可以工作,编译器可能不喜欢lambda的返回类型。 如果你想离开Strict,这样做也应该有用,我相信:

Public Function [Select](Of E As Class)(ParamArray includeExpressions As Linq.Expressions.Expression(Of Func(Of E, Object))()) As IQueryable(Of E)
        Dim result As IQueryable(Of E) = Nothing

        If includeExpressions.Any() Then
            result = includeExpressions.Aggregate(Context.[Set](Of E)(), (Function(current, expression) CType(current.Include(expression), DbSet(Of E))))
        End If

        Return result
    End Function

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM