我加入了来自2个不同表的邮政编码,这些表有大量的数据,并按邮政编码编制索引。
如果我修剪t.zipplus4上的数字,这样两个邮政编码字段都只有5位数字,那么连接就能正常工作。
不幸的是,使用substring或replace会破坏索引,因此查询时间太长。
显然我不能使用trimstart?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();发布于 2013-02-17 03:05:23
在不破坏索引的情况下在linq中进行修剪是不可能的。答案是放弃linq2sql,转而使用ado.net,这样您就可以获得所有的sql功能。
发布于 2013-02-14 17:01:11
与c#中的LEFT最接近的等价物是String.Substring方法,它会转换为tsql的SUBSTRING函数,而这不是您的选择。
如果你只是想裁剪不必要的空格,使用String.Trim方法,它会被转换成类似LTRIM(RTRIM([t0].[zipplus4]))的东西。
您可以尝试通过使用SqlMethods.Like来使用tsql的LIKE (从问题中不清楚LIKE是否适合这里)
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。
https://stackoverflow.com/questions/14868909
复制相似问题