2011-07-21 65 views
0

我有下面的代碼:將Func(Of Type,Boolean)轉換爲表達式(Of Func(Of Type,Boolean))?

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(中 布爾)的表達類型System.Linq.Expressions.Expression(的 System.Func(someObject,布爾))。

我也曾嘗試:

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

這也不起作用。

如果我沒有CType,我的where從IQueryable和IEnumerable出現縮小的轉換錯誤,所以我需要那裏,但我不知道如何寫入參數作爲表達式,以便它可以被轉換。任何幫助?

+0

是發佈的類型(x.Publish)可爲null的布爾值?如果是這樣,你只需要改變表達式來看起來像這樣。表達式(的Func(的someObject,System.Nullable(的布爾)))... ... –

+0

@布萊恩Dishaw,它不是一個可空布爾,我試着你的建議,它仍然說除了最後一樣的東西部分說Nullable(布爾)而不是布爾。 – SventoryMang

回答

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轉換爲表達式。

+0

@A。無論如何要寫這樣的話,我可以把所有內容放在.Where中而不需要聲明額外的變量? – SventoryMang

+1

我不是一個VB.NET專家,所以我嘗試了我自己的工作,並且它在'CType'和'inline' expr'的版本中都能正常工作。所以問題必須在其他地方。你可以顯示你的'someObject'定義嗎? – NOtherDev

+0

@A。是的,這對我很有用,我只是想把它全部放進。當我嘗試時,你的工具 - >選項 - >項目和解決方案 - > vb默認選項是什麼樣的?這段代碼沒有運行時或編譯錯誤(當我只寫了沒有Ctype的函數時),但它仍然以下劃線和下劃線的形式出現。該對象不是問題,它是由實體框架從數據庫生成的。 – SventoryMang

相關問題