实体框架ToString方法

问题描述 投票:4回答:5

下面的代码块抛出错误。

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

任何建议?为什么出现这种情况,该如何解决?

c# linq-to-entities
5个回答
10
投票

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

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

(该TrimLeft是必要的,因为SQL的STR功能将右对齐的数字)



1
投票

如果s.Hawb已经是字符串类型(错误信息提示等等),然后从查询中删除的部分.ToString()

其理由是,在LINQ2SQL,你只能使用那些语言结构,可以转换成SQL。例如,如果你试图在你的C#表达式使用正则表达式,那么SQL不具有相应的构建正则表达式,从而LINQ无法翻译和执行查询。


0
投票

.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 ...;

0
投票

不使用的ToString

只是使用像

x.Hawb + "" == s.Hawb

© www.soinside.com 2019 - 2024. All rights reserved.