LINQ to Entities 不识别方法“Boolean Like(System.String, System.String)”,因此该方法无法转换为存储表达式。

标题是我在编写asp.net mvc3时报错的错误提示, 如有遇到此错误, 请继续往下看..

 在使用C#进行网页开发时, 我们可以使用linq进行快速便捷的数据库操作, SQL查询中, 有提供like关键字进行模糊查询, 对应的 linq提供了相应的方法进行模糊查询——SqlMethods.Like(string, string);

出现该错误的原因:

  • 使用了ADO.NET实体数据模型
  • 直接对对ADO.NET实体使用SqlMethods.Like(string, string);方法

错误示例:

string str = "%t%y%t%";
Table_1[] t_1 = (from tab in Database_1.Table_1
                 where SqlMethods.Like(tab.Title, str)
                 orderby tab.Id descending
                 select tab).ToArray();

 错误说明:

  示例中的Database_1.Table_1是System.Data.Entity.DbSet<TEntity>类型, 出错实际原因是因为SqlMethods.Like(string, string);方法不能对System.Data.Entity.DbSet<TEntity>类型进行操作,上面的代码在使用的数据模型是Linq to SQL类型的时候便不会报错。

解决方案:

  根据错误说明, 我们知道, 报错的原因在于类型不对, 所以我们只需要将Database_1.Table_1进行类型转换即可, 目标类型为IEnumerable<T>, 使用AsEnumerable<T>()方法即可。

正确示例:

string str = "%t%y%t%";
Table_1[] t_1 = (from tab in Database_1.Table_1.AsEnumerable<Table_1>()
                 where SqlMethods.Like(tab.Title, str)
                 orderby tab.Id descending
                 select tab).ToArray();
原文地址:https://www.cnblogs.com/hourglasser/p/3307338.html