Linq:SqlFunctions.PatIndex vs string.Contains用于字符串比较

时间:2014-03-17 13:34:48

标签: c# linq

同一查询的以下哪个版本的效果会更好:

版本1(string.Contains):

var query = db.Products
    .Where( p => p.Description.Contains( description ) );

版本2(SqlFunctions.PatIndex):

var query = db.Products
    .Where( p => SqlFunctions.PatIndex("%" + description + "%",p.Description) > 0  );

1 个答案:

答案 0 :(得分:7)

我认为版本1在理论上运行得更快。

原因:

  1. 两个版本最终都会转换为SQL查询。
  2. 版本1转换为where子句具有“like”运算符
  3. 的查询
  4. 版本2转换为具有'PatIndex'功能的where子句的查询。
  5. 我们知道,与大型数据集中的纯'like'运算符相比,SQL中的函数返回结果需要更长的时间。