LINQ to Entities无法识别方法'System.String ToString(Int32)'

时间:2015-05-14 03:32:28

标签: c# .net linq entity-framework compiler-errors

您好我正在使用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();

请告诉我编写此查询的正确方法。

4 个答案:

答案 0 :(得分:2)

您不能在LINQ to Entities语句中使用这些转换函数,它们无法转换为SQL,您需要在内存中进行转换。但我认为你根本不需要这样做。

如果您只是使用resultMap获取resultListResults已过滤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.ResultDEresult.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