- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下模型
public class Exchange
{
public int Id { get; set; }
[Index("ExchangeIdx", 1)]
public int ExchangeSetId { get; set; }
[Required]
[MaxLength(10)]
[Index("ExchangeIdx", 2)]
public string BasePrefix { get; set; }
[Required]
[MaxLength(10)]
[Index("ExchangeIdx", 3)]
public string DestPrefix { get; set; }
}
我正在调用这个函数
var exchange = context.Exchanges.FirstOrDefault(x =>
x.ExchangeSetId == exchangeSetId &&
x.BasePrefix.StartsWith(baseNumber.Substring(4)) &&
baseNumber.StartsWith(x.BasePrefix) &&
destNumber.StartsWith(x.DestPrefix));
上面试图重现下面的sql
SELECT TOP 1 * FROM Exchanges
where ExchangeSetId = 1
and BasePrefix like left('0732055827', 4) + '%'
and '0732055827' like BasePrefix +'%'
and '0732612680' like DestPrefix +'%'
但是它生成了以下令人讨厌的工作:
exec sp_executesql N'SELECT TOP (1)
[Extent1].[Id] AS [Id],
[Extent1].[ExchangeSetId] AS [ExchangeSetId],
[Extent1].[BasePrefix] AS [BasePrefix],
[Extent1].[DestPrefix] AS [DestPrefix]
FROM [dbo].[Exchanges] AS [Extent1]
WHERE ([Extent1].[ExchangeSetId] = @p__linq__0)
AND (( CAST(CHARINDEX(SUBSTRING(@p__linq__1, 4 + 1, ( CAST(LEN(@p__linq__1) AS int)) - 4), [Extent1].[BasePrefix]) AS int)) = 1)
AND (( CAST(CHARINDEX([Extent1].[BasePrefix], @p__linq__2) AS int)) = 1) AND (( CAST(CHARINDEX([Extent1].[DestPrefix], @p__linq__3) AS int)) = 1)',N'@p__linq__0 int,@p__linq__1 nvarchar(4000),@p__linq__2 nvarchar(4000),@p__linq__3 nvarchar(4000)',@p__linq__0=1,@p__linq__1=N'0732055827',@p__linq__2=N'0732055827',@p__linq__3=N'0732612680'
如您所见,它正在为 StartsWith 生成 CHARINDEX。
问题是这忽略了我设置的所有索引,并且需要很多秒才能在 500 万条记录上运行。
我如何利用链接到实体,并满足我的上述要求(包括索引)?
我唯一能想到的就是使用存储过程或原始 SQL 语句,这会破坏整个实体。
最佳答案
到目前为止我找到的唯一合适的解决方案如下
var exchange = context.Database.SqlQuery<Exchange>(
"SELECT TOP 1 * FROM Exchanges where ExchangeSetId = @ExchangeSetId and BasePrefix like left(@BaseNumber, 3) + '%' and @BaseNumber like BasePrefix +'%' and @DestNumber like DestPrefix +'%'",
new SqlParameter("ExchangeSetId", exchangeSetId),
new SqlParameter("AreaCode", areaCode),
new SqlParameter("BaseNumber", baseNumber.Substring(2)),
new SqlParameter("DestNumber", destNumber.Substring(2))).Select(x => new ExchangeViewModel(x)).FirstOrDefault();
关于sql - 链接到实体,如何修复开始解析为 sql CHARINDEX 并忽略索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22979407/
您认为以下结果如何? SELECT CHARINDEX('space and /* comment */', 'Phrase with space and /* comment */') AS Mat
有一个列 name 我想从中创建一个新列。示例: name asd_abceur1mz_a asd_fxasdrasdusd3mz_a asd_abceur10yz_a asd_fxasdrasdus
我正在尝试使用“a”作为分隔符将此字符串分成不同的列 005031812180200000100aRemaining Inside Terminala Cassette 1(BIN1)/c:HTG 2
我有下面的 sql 查询,需要在 bigquery 上运行 select replace(substring(p.name, charindex(',', p.name), len(p.name)),
我有一列数据是这样的 DOESTOEIVSKI ALEXANDER JAMES JOYCE ROBERT LUDLUM MURAKAMI HARUKU 目标:使第一个字符串大写,其余小写,第二个字
有谁明白为什么我仍然得到 0 的结果: SELECT [KnowItAll].[dbo].[VSM_CanculateTermFrequency] ( 'hello hi hello by h
我有一个表 MsStaff 由几列组成。其中一列是 StaffName。 StaffName 数据包含双字姓名(如 'Edy Harsono')和三字姓名(如 'Dian Felita Tanoto'
我有一个表 MsStaff 由几列组成。其中一列是 StaffName。 StaffName 数据包含双字姓名(如 'Edy Harsono')和三字姓名(如 'Dian Felita Tanoto'
我一直在存储过程中使用 CHARINDEX 来检查 NVARCHAR(MAX) 类型的变量,但今天我发现 CHARINDEX有 8,000 字节的限制! 我找到这篇文章SQL CHARINDEX()
我的数据库中有一个字段,出于报告目的,我计划使用以下语句将其截断为 50 个字符。 SELECT (CASE WHEN (LEN(Notes) > 50) THEN SUBSTRING(Notes,
有人可以使用新的用户定义函数复制 CHARINDEX 吗? (使用指令) IF(CHARINDEX('(G)',v_username) = 0) THEN mysql版本。如果能够保持功能不变我的迁移
我在 SSIS 中有一个 Excel 源代码,其中有一列名为 [Name]其中有一个类似 Joe Bloggs 的条目 我想将 [Name] 分为 [Forename] 和 [Surname] 请问如
我们使用 Entity Framework 进行数据库访问,当我们“思考” LIKE 语句时 - 它实际上会生成 CHARINDEX 内容。因此,在我简化它们以在我们的特定服务器上证明一个点之后,这里
如何根据“-”字符拆分以下字符串? 所以如果我有这个字符串:LD-23DSP-1430 我怎么能把它分成这样的单独的列: LD 23DSP 1430 另外,如果需要(没有“-
我有一个关于 SQL SERVER charindex 函数的简单问题。 DECLARE @VAR1 varchar SET @VAR1 = 'abcdef' PRINT CHARINDEX('c',
我有一个字符串“some.file.name”,我想抓取“some.file”。 为此,我需要找到最后一次出现的“.”在一个字符串中。 我的解决方案是: declare @someStr varch
我有一个关于 SQL SERVER charindex 函数的简单问题。 DECLARE @VAR1 varchar SET @VAR1 = 'abcdef' PRINT CHARINDEX('c',
我有以下模型 public class Exchange { public int Id { get; set; } [Index("ExchangeIdx", 1)] pub
我想知道之间是否存在差异(除了引擎兼容性和可选事件) CHARINDEX (expressionToFind ,expressionToSearch [, start_location]) 和 INS
我需要将逗号分隔的字符串拆分为第二列我有下表: CL1 POS POS2 LENGHT ALLELE 1 3015108,30151
我是一名优秀的程序员,十分优秀!