[英]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.