首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不破坏索引的linq2sql查询中的Trim字段

不破坏索引的linq2sql查询中的Trim字段
EN

Stack Overflow用户
提问于 2013-02-14 14:22:12
回答 2查看 134关注 0票数 0

我加入了来自2个不同表的邮政编码,这些表有大量的数据,并按邮政编码编制索引。

如果我修剪t.zipplus4上的数字,这样两个邮政编码字段都只有5位数字,那么连接就能正常工作。

不幸的是,使用substring或replace会破坏索引,因此查询时间太长。

显然我不能使用trimstart?bc它在sql中不存在。

在sql left(Zip Code,5)中,可以很好地处理索引。

在linq中有没有什么方法可以让我做到这一点?

示例:

代码语言:javascript
运行
复制
  var query = (from t in db.test
             join g in db.test2 on t.zipplus4 equals g.zip
             select t).ToList();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-17 03:05:23

在不破坏索引的情况下在linq中进行修剪是不可能的。答案是放弃linq2sql,转而使用ado.net,这样您就可以获得所有的sql功能。

票数 0
EN

Stack Overflow用户

发布于 2013-02-14 17:01:11

与c#中的LEFT最接近的等价物是String.Substring方法,它会转换为tsql的SUBSTRING函数,而这不是您的选择。

如果你只是想裁剪不必要的空格,使用String.Trim方法,它会被转换成类似LTRIM(RTRIM([t0].[zipplus4]))的东西。

您可以尝试通过使用SqlMethods.Like来使用tsql的LIKE (从问题中不清楚LIKE是否适合这里)

代码语言:javascript
运行
复制
var query = (from t in db.test
             from g in db.test2
             where SqlMethods.Like(t.zipplus4, g.zip + '%')
             select t).ToList();

但我不确定这是否会破坏索引。

如果所有这些都不适合您,请考虑为此创建a stored procedure

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

https://stackoverflow.com/questions/14868909

复制
相关文章

相似问题

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