entity frameworkToString方法

以下代码块抛出错误。

LINQ to Entities无法识别方法’System.String ToString()’方法,并且此方法无法转换为存储表达式。

db.tbOnIgmHawbDetails .Where(s => !db.tbImpoExaminations.Any(x => x.Hawb.ToString() == s.Hawb) && s.AwbNo == p) .Select(s => s.Hawb).ToList(); 

有什么建议吗? 为什么会这样,解决方案是什么?

您可以尝试使用SqlFunctions.StringConvert …使用decimal转换:

 SqlFunctions.StringConvert((decimal)pxHawb).TrimLeft() == ... 

TrimLeft是必要的,因为SQL的STR函数会正确对齐数字)

使用EF 6.1正确支持.ToString() : http : //blogs.msdn.com/b/adonet/archive/2014/03/17/ef6-1-0-rtm-available.aspx

如果s.Hawb已经是字符串类型(错误消息暗示如此),则从查询中删除部分.ToString()

原因是在LINQ2SQL中,您只能使用那些可以转换为SQL的语言结构。 例如,如果您尝试在C#表达式中使用RegEx,则SQL没有RegEx的相应构造,因此LINQ无法转换和执行您的查询。

.ToString()和L2E不支持的方法之前轻松添加.AsEnumerable()

 var asen = db.tbOnIgmHawbDetails.AsEnumerable(); var result = asen.Where(s => !asen.Any(x => x.Hawb.ToString() == s.Hawb) && s.AwbNo == p) .Select(s => s.Hawb).ToList(); 

这应该有效。 但是,如果没有,请尝试通过linq-to-objects语法执行查询:

 var result = from a in asen where ... select ...;