LINQ to Entities 无法识别方法“System.String ToString(Int32)”
Posted
技术标签:
【中文标题】LINQ to Entities 无法识别方法“System.String ToString(Int32)”【英文标题】:LINQ to Entities does not recognize the method 'System.String ToString(Int32)' 【发布时间】:2015-07-25 13:32:30 【问题描述】:您好,我正在使用一个 linq 查询,它抛出错误 LINQ to Entities 无法识别方法 'System.String ToString(Int32)' 方法,并且此方法无法转换为存储表达式。
List<string> resultMap = (from item in mapResult
select Convert.ToString(item.ResultDE)).ToList();
在下面的语句中抛出错误
List<Result_DE> resultList = (from result in db.Result_DE
where result.IsActive == "1"
&& resultMap.Contains(Convert.ToString(Convert.ToInt32(result.ID)))
select result).ToList();
请告诉我编写此查询的正确方法。
【问题讨论】:
我已尝试使用以下语句。它执行但没有输出List<Result_DE> resultList = (from result in db.Result_DE where result.IsActive == "1" && resultMap.Contains(SqlFunctions.StringConvert(result.ID)) select result).ToList();
您正在将字符串转换为 int 并再次转换回字符串?
result.ID的属性是什么
result.ID 的类型是什么?
我正在将字符串转换为 int 并再次转换回字符串,因为没有任何效果,所以我尝试了各种组合
【参考方案1】:
使用 SqlFunctions.StringConvert 而不是 Convert.ToString。
herehere
提出了类似的问题并得到了回答【讨论】:
【参考方案2】:在调用任何方法(例如 ToString())之前,您需要使用 AsEnumerable() 将 LINQ 转换为 Object。
【讨论】:
【参考方案3】:您不能在 LINQ to Entities 语句中使用这些转换函数,它们不能转换为 SQL,您需要在内存中进行转换。但我认为你根本不需要这样做。
如果您只是使用resultMap
来获取您的resultList
,并由Results
过滤,其中Id
存在于mapResult
中,请执行以下操作:
var resultList = db.Result_DE
.Where(r => r.IsActive == "1" && mapResult.Any(mr => mr.ResultDE == r.ID));
.ToList();
如果mapResult
是内存中的集合,而不是附加到db
上下文的IQueryable
,则需要执行以下操作:
var resultIds = mapResult.Select(mr => mr.ResultDE).ToList();
var resultList = db.Result_DE
.Where(r => r.IsActive == "1" && resultIds.Contains(r.ID));
.ToList();
【讨论】:
我编辑了您的答案,现在它显示 Linq to Entities。如果您认为将 Linq To Sql 添加到组合中是值得的,您可以更新您的评论。恕我直言,这令人困惑,没有人使用“Linq to DB”一词 @Pawel 我同意,将保持原样。 谢谢 :) ..mapResult.Any(mr => mr.ResultDE == r.ID)
工作【参考方案4】:
如果您的 item.ResultDE
和 result.ID
是 Int32 的变量类型,
为什么不直接创建List<Int32>
?
List<Int32> resultMap = (from item in mapResult
select item.ResultDE).ToList<Int32>();
List<Result_DE> resultList = (from result in db.Result_DE
where result.IsActive == "1"
&& resultMap.Contains(result.ID)
select result).ToList<Result_DE>();
【讨论】:
以上是关于LINQ to Entities 无法识别方法“System.String ToString(Int32)”的主要内容,如果未能解决你的问题,请参考以下文章
LINQ to Entities 无法识别方法 IsNullOrWhiteSpace
错误:LINQ to Entities 无法识别方法 DataLength
LINQ To Entities 无法识别方法 Last。真的吗?
LINQ To Entities 无法识别方法 Last。真的吗?