下面的代码块抛出错误。
LINQ到实体无法识别方法“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)p.x.Hawb).TrimLeft() == ...
(该TrimLeft
是必要的,因为SQL的STR
功能将右对齐的数字)
.ToString()
支持妥善EF 6.1前进:http://blogs.msdn.com/b/adonet/archive/2014/03/17/ef6-1-0-rtm-available.aspx
如果s.Hawb
已经是字符串类型(错误信息提示等等),然后从查询中删除的部分.ToString()
。
其理由是,在LINQ2SQL,你只能使用那些语言结构,可以转换成SQL。例如,如果你试图在你的C#表达式使用正则表达式,那么SQL不具有相应的构建正则表达式,从而LINQ无法翻译和执行查询。
在.AsEnumerable()
和那些L2E不支持该方法前轻松添加.ToString()
:
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到对象的语法来进行查询:
var result = from a in asen
where ...
select ...;
不使用的ToString
只是使用像
x.Hawb + "" == s.Hawb