C# 尝试在Linq中使用包含时出错
我从客户端获取字符串数组。然后在我的webapi中,我将其拆分如下C# 尝试在Linq中使用包含时出错,c#,linq,C#,Linq,我从客户端获取字符串数组。然后在我的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 ,
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()'方法,并且无法将此方法转换为存储表达式。“”
这是因为包含。如何修复此错误?不要将您的
ID
转换为串联字符串,而是将它们保存在列表/IEnumerable
中,然后对其进行查询,如:
根据您的评论:
ID定义为字符串[]ID 您应该将它们转换为
IEnumerable
或List
等:
List<int> integerIds = ids.Select(int.Parse).ToList();
只需确保Id
包含与表Id
相同类型的元素即可
出现异常的原因是由于在LINQ查询中调用了
ToString
,提供程序试图在数据源语言(可能是SQL)下对其进行转换,但无法实现 不要将您的ID
转换为串联字符串,而是将它们保存在列表/IEnumerable
中,然后对其进行查询,如:
根据您的评论:
ID定义为字符串[]ID 您应该将它们转换为
IEnumerable
或List
等:
List<int> integerIds = ids.Select(int.Parse).ToList();
只需确保Id
包含与表Id
相同类型的元素即可
出现异常的原因是由于在LINQ查询中调用了
ToString
,提供程序试图在数据源语言(可能是SQL)下对其进行转换,但无法实现 a.Id
的类型是什么?你有没有考虑过使用逗号分隔列表的负面影响?(假设有一个ID为“x”,另一个ID为“xy”-当有人搜索xy
时,您真的希望x
记录匹配吗?)@JonSkeet a。ID是整数。我没有获取不同记录的问题。我无法将ToString()
转换为sql@Happy:你的意思是你不在乎结果是否错误?这似乎很奇怪——对于整数来说也是如此,如果字符串的结尾是“15,20”,那么它也会找到ID为1、5、2和0的记录。当然你不想这样。如果我得到逗号分隔的值为15,20,那么我当然需要15,20,a.Id
的类型是什么?你有没有考虑过使用逗号分隔列表的负面影响?(假设有一个ID为“x”,另一个ID为“xy”-当有人搜索xy
时,您真的希望x
记录匹配吗?)@JonSkeet a。ID是整数。我没有获取不同记录的问题。我无法将ToString()
转换为sql@Happy:你的意思是你不在乎结果是否错误?这似乎很奇怪——对于整数来说也是如此,如果字符串的结尾是“15,20”,那么它也会找到ID为1、5、2和0的记录。你肯定不想这样。如果我得到逗号分隔的值为15,20,那么我当然需要15,20@Happy,ids
将是一个IEnumerable
,因为它在字符串中使用。Join
就这样离开它吧,只需确保它包含与a.Id
field相同类型的数据。a.Id是一个整数fieldid定义为string[]ids@Happy,您必须将它们转换为List
或IEnumerable
我已经修改了代码,这应该可以解决问题problem@Happy,ids
将是一个IEnumerable
,因为它在字符串中使用。Join
只需保持这样,只需确保它包含与a.Id
字段相同类型的数据。a.Id是一个整数字段Id定义为字符串[]ids@Happy,您必须将它们转换为List
或IEnumerable
我已经修改了代码,这应该可以解决问题