【发布时间】:2015-09-02 23:55:18
【问题描述】:
我正在调用本地网络之外的外部数据库,但是查询需要 40 秒才能结束..
我正在使用 edmx 拨打电话。
String Example = "Example";
var Result = EDMXEntity.Entities
.Where(
x =>
(
x.Name.ToString().ToLower().Contains(Example.ToLower())
))
.Take(50)
.ToList();
感谢 Szer 提供的当前代码:
var Result = EDMXEntity.Entities.Where(x => SqlFunctions.PatIndex(x.Name.ToString().ToLower(), Example.ToLower()) > 0).Take(50).ToList();
【问题讨论】:
-
您的
IQueryable转换为SELECT TOP 50 * FROM [Extent1] WHERE (CAST(CHARINDEX(LOWER(@p__linq__0), LOWER(CASE WHEN ([Extent1].[Name] IS NULL) THEN N'' ELSE [Extent1].[Name] END)) AS INT)) > 0。可能 where 子句是滞后的原因 -
您的问题是关于如何提高性能?
-
@Lightwalker 试试这个
var Result = EDMXEntity.Entities.Where(x => SqlFunctions.PatIndex(x.Name.ToString().ToLower(), Example.ToLower()) > 0).Take(50).ToList(); -
@Szer 这是我的第一个猜测,但 sql server management studio 在不到一秒的时间内就完成了..
-
@Lightwalker 完成
标签: c# performance linq ef-code-first edmx