2009-03-04 56 views
3

我有這個Linq to SQL查詢序列,基本上是在名爲PROJECTS的表上返回一個搜索。我正在利用延期執行來緩慢建立起來。Linq to SQL在單個查詢中使用多個DataContexts

var query = from p in objDBContext.PROJECTs 
where (p.PROVIDER_ID == cwForm.productForm) 
select p; 

query = from p in query 
where p.SubmittedDate >= cwForm.beginDateForm 
select p; 

我寫了返回標量值和表值作爲輔助函數,因爲LINQ不支持ISDATE()或全文搜索一些SQL函數。它們與Projects表格位於相同的.dbml文件中。

所以現在我有:

var dateQuery = from d in objDBContext.ISDATE 
select d; 
//returns a bool 

var ftsQuery = from f in objDBContext.FullTextSearch 
select f; 
//returns a valued-table with the primary keys of hits with fulltextsearch 

我的問題是,我該如何使用這些新objDBContexts原始查詢P'我還想了解如何將一個executequery()映射回原始查詢。

喜歡的東西:

query = from p in query 
     from d in dateQuery 
     from f in ftsQuery 
where d.ISDATE(p.Field1) && f.FullContextSearch(searchString)  

    select p; 

我希望是有道理的。我有幾個類型不匹配的錯誤,並嘗試了一段時間的谷歌搜索,但無法找到任何東西。

回答

2

既然您已經定義了上下文類的所有方法,使用相同的實例的所有三個:

var query = from p in objDBContext.Projects where 
    p.PROVIDER_ID == cwForm.productForm 
    && objDBContext.ISDATE(p.Field1) 
    && objDBContext.FullTextSearch(searchString) 
     //assuming FullTextSearch returns boolean 
    select p 

如果FullTextSearch不返回布爾值,你需要建立一個確實的表達式。如果它返回IList,你可以這樣做objDBContext.FullTextSearch(searchString).Contains(p)

雖然記住你要做的事情會導致數據庫的三次往返,不管你裁剪它的方式。在這種情況下,手工製作SQL可能會更好。 LINQ to SQL不能,也不打算在100%的時間內替換SQL。

+0

感謝Rex,那些SQL的開銷成本是多少?我非常喜歡使用LINQ2SQL構建動態SQL查詢的簡單性和清潔性。並且我的FullTextSearch返回一個帶有與searchString匹配的行的索引鍵的值表。加入會在這裏最有效率嗎? – stevenjmyu 2009-03-04 20:23:10