0

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

如果我修剪 t.zipplus4 上的数字,则连接有效,因此两个邮政编码字段都只有 5 位数字。
不幸的是,使用 substring 或 replace 会破坏索引,因此查询时间过长。
我显然不能使用修剪启动?bc 它不存在于 sql 中。
在 sql left([Zip Code], 5) 中,索引可以正常工作。
linq有什么办法可以解决这个问题吗?

例子:

  var query = (from t in db.test
             join g in db.test2 on t.zipplus4 equals g.zip
             select t).ToList();
4

2 回答 2

1

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

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

您可以尝试使用 tsql LIKE(从问题中不清楚是否LIKE适合此处)SqlMethods.Like

var query = (from t in db.test
             from g in db.test2
             where SqlMethods.Like(t.zipplus4, g.zip + '%')
             select t).ToList();

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

如果这一切都不适合您,请考虑为此创建一个存储过程

于 2013-02-14T09:01:10.540 回答
0

在不破坏索引的情况下,不可能在 linq 中进行修剪。答案是为 ado.net 放弃 linq2sql,以便获得所有 sql 功能。

于 2013-02-16T19:05:22.717 回答