将Func(Of Type,Boolean)转换为Expression(Of Func(Of Type,Boolean))?

时间:2011-07-21 14:49:07

标签: .net asp.net entity-framework lambda expression-trees

我有以下代码:

Dim query As IQueryable(Of someObject) = 
    New ObjectQuery(Of someObject)(queryString, db, MergeOption.NoTracking)
        .Where(CType(Function(x) x.Publish = True,
                     Expression(Of Func(Of someObject, Boolean))))

它给了我一个错误说:

  

无法转换Func(someObject)类型的表达式System.Nullable(Of   Boolean)键入System.Linq.Expressions.Expression(Of   System.Func(someObject,Boolean))。

我也尝试过:

 .Where(CType(Function(x) x.Publish = True,
                     Expression(Of Func(Of someObject, Nullable(Of Boolean)))))

也不起作用。

如果我没有CType,我的where会出现来自IQueryable和IEnumerable的缩小转换错误,所以我需要那里,但我不知道如何将参数作为表达式写入所以它可以转换。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

此处不要使用CType转换 - 直接创建表达式:

Dim expr As Expression(Of Func(Of someObject, Nullable(Of Boolean))) =
    Function(x) x.Publish = True

Dim query As IQueryable(Of someObject) = 
    New ObjectQuery(Of someObject)(queryString, db, MergeOption.NoTracking)
        .Where(expr)

表达式需要这样创建。无法将现有Func转换为表达式。