我有这个Linq to SQL查询序列,基本上是在名为PROJECTS的表上返回搜索。我正在利用延迟执行来慢慢建立起来。
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;
我编写了一些SQL函数,它们将标量值和表值作为辅助函数返回,因为LINQ不支持ISDATE()
或全文搜索。它们与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
我的问题是,如何在原始查询p上使用这些新的objDBContexts?我也想知道如何将executequery()映射回原始查询。
类似的东西:
query = from p in query
from d in dateQuery
from f in ftsQuery
where d.ISDATE(p.Field1) && f.FullContextSearch(searchString)
select p;
我希望这是有道理的。我有一些类型不匹配的错误,并尝试谷歌搜索一段时间,但找不到任何东西。
答案 0 :(得分: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。