LINQ to Entities无法识别方法’System.String ToString(Int32)’
嗨,我正在使用linq查询抛出错误LINQ到实体无法识别方法’System.String ToString(Int32)’方法,并且此方法无法转换为商店表达式。
List resultMap = (from item in mapResult select Convert.ToString(item.ResultDE)).ToList();
错误是抛出以下声明
List resultList = (from result in db.Result_DE where result.IsActive == "1" && resultMap.Contains(Convert.ToString(Convert.ToInt32(result.ID))) select result).ToList();
请告诉我编写此查询的正确方法。
您不能在LINQ to Entities语句中使用这些转换函数,它们无法转换为SQL,您需要在内存中进行转换。 但我认为你根本不需要这样做。
如果您只是使用resultMap
来获取您的resultList
,并通过在mapResult
存在Id
的Results
进行过滤,请执行以下操作:
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();
在调用任何方法(例如ToString())之前,需要使用AsEnumerable()将LINQ转换为Object。
如果你的item.ResultDE
和item.ResultDE
是Int32的可变类型,为什么不直接创建List
?
List resultMap = (from item in mapResult select item.ResultDE).ToList (); List resultList = (from result in db.Result_DE where result.IsActive == "1" && resultMap.Contains(result.ID) select result).ToList ();
使用SqlFunctions.StringConvert而不是Convert.ToString。
在这里提出并回答了类似的问题