Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试在Linq中使用包含时出错_C#_Linq - Fatal编程技术网

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

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 ,

我从客户端获取字符串数组。然后在我的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()'方法,并且无法将此方法转换为存储表达式。“”


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

不要将您的
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
我已经修改了代码,这应该可以解决问题