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存在IdResults进行过滤,请执行以下操作:

 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.ResultDEitem.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。

在这里提出并回答了类似的问题