您好我正在使用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();
请告诉我编写此查询的正确方法。
答案 0 :(得分:2)
您不能在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
是内存中的集合,而不是附加到IQueryable
上下文的db
,则需要执行以下操作:
var resultIds = mapResult.Select(mr => mr.ResultDE).ToList();
var resultList = db.Result_DE
.Where(r => r.IsActive == "1" && resultIds.Contains(r.ID));
.ToList();
答案 1 :(得分:2)
在调用任何方法(例如ToString())之前,需要使用AsEnumerable()将LINQ转换为Object。
答案 2 :(得分:0)
如果您的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>();
答案 3 :(得分:0)
使用SqlFunctions.StringConvert而不是Convert.ToString。
提出了类似问题并回答了here