繁体   English   中英

Linq 到 SQL 在单个查询中使用多个 DataContext

[英]Linq to SQL using multiple DataContexts in a single query

我有这个 Linq 到 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 函数,它们返回标量值和表值作为助手 function 因为 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? 我也有兴趣弄清楚如何将 map 执行查询()返回到原始查询中。

就像是:

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

    select p; 

我希望这是有道理的。 我有一些类型不匹配的错误,并尝试用谷歌搜索一段时间,但找不到任何东西。

由于您已经在上下文 class 上定义了所有方法,因此对所有三个使用相同的实例:

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 不返回 boolean,您需要构建一个表达式。 就像它返回 IList 一样,您可以执行objDBContext.FullTextSearch(searchString).Contains(p)

尽管请记住,无论您采用哪种方式,您尝试执行的操作都会导致数据库往返三次。 在这种情况下,手工制作 SQL 可能会更好。 LINQ 到 SQL 不能也无意在 100% 的情况下替换 SQL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM