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

5

你好,我正在使用一个 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 resultList = (from result in db.Result_DE where result.IsActive == "1" && resultMap.Contains(SqlFunctions.StringConvert(result.ID)) select result).ToList();` - Biswakalyan
你正在将一个字符串转换为整数,然后再转换回字符串? - Brendan Green
result.ID的属性是什么? - Yu Yenkan
结果.ID的类型是什么? - Adil Mammadov
我将字符串转换为整数,然后再转换回字符串,因为什么都不起作用,所以我尝试了各种组合。 - Biswakalyan
4个回答

2
在调用任何方法(例如ToString())之前,您需要使用AsEnumerable()将LINQ转换为对象。

2

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

如果你只是使用resultMap来获取由Results过滤后的resultList,其中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
@Pawel 我同意,将其保留不变。 - Alex
感谢 :) .. mapResult.Any(mr => mr.ResultDE == r.ID) 已经生效 - Biswakalyan

0

使用 SqlFunctions.StringConvert 代替 Convert.ToString。

类似的问题已经在 这里 得到了回答。


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>();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接