首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SharePoint中的动态链接查询

SharePoint中的动态链接查询
EN

Stack Overflow用户
提问于 2010-11-26 00:17:53
回答 1查看 649关注 0票数 1

我有一个带有过滤器的页面,根据用户的选择,它必须生成一个查询。我使用的是以下代码:

代码语言:javascript
复制
var riskitem = (from risk in context.RisksList
                        where risk.ProjectCode == sProjectCode &&
                                    (
                                        (search == "" && status == "" && ispublic == TriState.NA) ||
                                        (search != "" && (
                                            (!String.IsNullOrEmpty(risk.Description) && risk.Description.IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0) ||
                                            (!String.IsNullOrEmpty(risk.Title) && risk.Title.IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0) ||
                                            (risk.Probability.HasValue && risk.Probability.Value.ToString().IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0) ||
                                            (!String.IsNullOrEmpty(risk.Mitigation) && risk.Mitigation.IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0) ||
                                            (!String.IsNullOrEmpty(risk.Observations) && risk.Observations.IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0)
                                        )) ||
                                        (
                                            (status != "" && risk.Status.Value.ToString() == status) ||
                                            (status == "" && search != "" && risk.Status.Value.ToString().IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0)
                                        ) ||
                                        (
                                            (ispublic != TriState.NA && ((risk.IsPublic.Value && ispublic == TriState.True) || (!risk.IsPublic.Value && ispublic == TriState.False))) ||
                                            (ispublic == TriState.NA && search != "" && risk.IsPublic.HasValue && risk.IsPublic.Value.ToString().IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0)
                                        )
                                    )
                        select risk).Take((pagesize * (pageindex + 1)) + 1);

但是,Linq- to -Sharepoint不会将大部分内容转换为CAML,并且我要查询的列表有超过50000个条目。检索项目大约需要4-8秒,这是不能接受的。我一直在尝试生成一个动态查询,但到目前为止,我还没能让它工作。使用AND和OR操作来生成查询,我可以将所有这些条件放在代码上,并提高性能。

如果有人能帮忙,我将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2010-11-30 01:55:30

我已经放弃了使用linq to sharepoint来处理带有复杂谓词过滤器的大型列表。我使用联合和/或合并来自SPQuery结果的拼接收集结果的数据的性能要好得多。

看起来您正在复制sharepoint搜索引擎的工作,您是否考虑过是否可以替换为关键字或全文查询类之类的内容?

此外,您应该能够消除重复计算的需要,例如检查空字符串和indexof。也就是说..。只是简单地像这样

代码语言:javascript
复制
Risk.IsPublic.Value.ToString().IndexOf(search, StringComparison.OrdinalIgnoreCase) > -1

IsPublic的数据类型是什么?如果这是一个布尔型字段,那么您也可以节省一些时间,而不必进行额外的转换。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4279007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档