我正在加入来自2个不同表格的邮政编码,这些表格包含大量数据并在邮政编码上编入索引。
如果我删除了t.zipplus4上的数字,则联接有效邮政编码字段只有5位数。
不幸的是使用子字符串或替换会破坏索引,因此查询耗时太长。
我显然不能使用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();
答案 0 :(得分:1)
c#中LEFT
的最接近的等价物是String.Substring
方法,它转换为tsql的SUBSTRING
函数,这不是您的选择。
如果您只想修剪不必要的空格,请使用String.Trim
方法将其转换为类似LTRIM(RTRIM([t0].[zipplus4]))
的内容。
您可以尝试使用SqlMethods.Like
来使用tsql的LIKE
(这里的问题不清楚LIKE
是否合适):</ p>
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 :(得分:0)
在不破坏索引的情况下,无法在linq中进行修剪。答案是为ado.net抛弃linq2sql,以便获得所有sql功能。