我从客户端获取字符串数组。然后在我的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。如何修复此错误?
不要将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),但无法转换。