尝试在Linq中使用包含时出错

本文关键字:包含时 出错 Linq | 更新日期: 2023-09-27 18:26:45

我从客户端获取字符串数组。然后在我的webapi中,我将其拆分为以下

var splitId = string.Join(",", ids);

然后我的Linq查询我使用上面的变量

这是我的Linq查询

var query = tableARepository.AsQueryable()
.Where(a=> splitId.Contains(a.Id.ToString()))
.Select(a => new {
    Id = a.Id
,   Name = a.Name
,   FkId = tableBRepository.AsQueryable().Min(b => b.fkid=a.id)
});

我得到这个例外:

LINQ to Entities无法识别方法"System.String ToString()"方法,并且此方法无法转换为存储表达式。","

这是因为Contains。如何修复此错误?

尝试在Linq中使用包含时出错

不要将ids转换为串联字符串,而是将它们保存在List<T>/IEnumerable<T>中,然后根据以下内容进行查询:

根据您的意见:

ID定义为字符串[]ID

您应该将它们转换为IEnumerable<int>List<int>,如:

List<int> integerIds = ids.Select(int.Parse).ToList();

然后在您的查询中:

var query = tableARepository.AsQueryable()
.Where(a=> integerIds.Contains(a.Id))

只需确保ids包含与表Id 相同类型的元素

出现异常的原因是由于LINQ查询中对ToString的调用,提供程序正试图将其转换为数据源语言(可能是SQL),但无法转换。