gpt4 book ai didi

c# - 在单个查询中使用多个 DataContext 的 Linq to SQL

转载 作者:行者123 更新时间:2023-11-30 17:24:44 25 4
gpt4 key购买 nike

我有这个 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 上使用这些新的 objDBContext?我也有兴趣弄清楚如何将 executequery() 映射回原始查询。

类似于:

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

select p;

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

最佳答案

因为您已经在上下文类上定义了所有方法,所以对所有这三个方法使用相同的实例:

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

但请记住,无论您采用哪种方式,您尝试执行的操作都会导致数据库往返三次。在这种情况下,手工编写 SQL 可能会更好。 LINQ to SQL 不能,也不打算在 100% 的时间替换 SQL。

关于c# - 在单个查询中使用多个 DataContext 的 Linq to SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/611554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com