如何将此C#lambda表达式转换为VB.Net
本文关键字:转换 VB Net 表达式 C#lambda | 更新日期: 2023-09-27 17:59:07
我正试图将我多次使用的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
调用没有正确数量的参数。我认为这是由于第二个参数not(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