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

标签 c# vb.net lambda

我正在尝试将我多次使用的 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 的返回类型。如果你想保持严格,这样做也应该有效,我相信:

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

关于c# - 如何将此 C# lambda 表达式转换为 VB.Net?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23197001/

相关文章:

c# - 没有元数据操作的 Odata 不起作用

c# - SAFE Pointer to a pointer (well reference to a reference) 在 C# 中

c# - 优化还是放弃 LINQ 查询?

asp.net - 运行进程时隐藏 vb.net 中的命令窗口

c# - 解释 c# lambda 语法

python - 如何在 Python 中实现 Selenium 多个 WebDriverWait 的方法链接

c# - 单元测试方法独立性

vb.net - 设置 IntelliSense 的默认异常类型

javascript - ASP.NET:在母版页、ResolveUrl 中使用 head.js

c++ - 为什么通过复制捕获的lambda具有与外部变量相同的地址