4

以下代码块引发错误。

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();

有什么建议吗?为什么会发生这种情况,解决方案是什么?

4

5 回答 5

14

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

于 2014-03-27T14:09:46.047 回答
10

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

SqlFunctions.StringConvert((decimal)p.x.Hawb).TrimLeft() == ...

(这TrimLeft是必要的,因为STRSQL 的功能会右对齐数字)

于 2013-08-11T06:59:24.317 回答
1

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

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

于 2013-08-11T06:32:18.280 回答
1

在L2E不支持.AsEnumerable()的和那些方法之前轻松添加:.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-to-objects 语法执行查询:

var result = from a in asen
             where ...
             select ...;
于 2013-08-11T07:26:27.413 回答
0

不要使用 ToString

就像使用一样

x.Hawb + "" == s.Hawb

于 2019-02-08T08:19:48.657 回答