2010-03-26 18 views
2

I previously asked關於在Linq To Entities中鏈接條件的問題。 現在我使用LinqKit,一切正常。 我想看看生成的SQL,並在閱讀this answer後,我用LinqPad使用PredicateBuilder,LINQPad和運算符生成的SQL ANY

這是我的發言:

var predProduct = PredicateBuilder.True<Product>(); 
var predColorLanguage = PredicateBuilder.True<ColorLanguage>(); 

predProduct = predProduct.And(p => p.IsComplete); 

predColorLanguage = predColorLanguage.And(c => c.IdColorEntity.Products.AsQueryable().Any(expr)); 

ColorLanguages.Where(predColorLanguage).Dump(); 

的代碼在VS2008,編譯併產生正確的結果集,但在LinqPad,我有以下錯誤:

NotSupportedException: The overload query operator 'Any' used is not Supported. 

哪有如果LINQPad失敗,我看到生成的SQL?

編輯

如果我寫

var predColorLanguage = PredicateBuilder.True<ColorLanguage>(); 

predColorLanguage = predColorLanguage.And(c => c.IdColorEntity.Products.Any((p => p.IsComplete)); 

ColorLanguages.Where(predColorLanguage).Dump(); 

作品...跆拳道?

回答

2

當你使用LINQKit,您可以通過該喂EntitySet的表達調用編譯(),然後調用AsExpandable()在主查詢,使這項工作:

var predProduct = PredicateBuilder.True<Product>(); 
var predColorLanguage = PredicateBuilder.True<ColorLanguage>(); 

predProduct = predProduct.And(p => p.IsComplete); 

predColorLanguage = predColorLanguage.And (
    c => c.IdColorEntity.Products.Any(predProduct.Compile())); 

ColorLanguages.AsExpandable().Where(predColorLanguage).Dump(); 

由於explained in the LINQKit article,編譯方法從未實際運行:AsExpandable將其除去並修改表達式樹,以便它可以與LINQ to SQL一起使用。

+0

問題不在Visual Studio中,而是在LinqPad中。 在Visual Studio中,它沒有問題。 我試過你的解決方案,沒有運氣。 – 2010-03-29 11:01:59

+0

你在使用Entity Framework嗎?如果是這樣,你在LINQPad中連接時選擇'Custom EF Context'嗎?如果您直接連接到LINQPad中的數據庫,那麼您使用的是LINQ to SQL,它可能會導致差異。 – 2010-03-30 00:52:38

相關問題