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

时间:2014-10-16 20:15:49

标签: 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
,   FkId = tableBRepository.AsQueryable().Min(b => b.fkid=a.id)
});

我得到了这个例外:

  

LINQ to Entities无法识别方法'System.String ToString()'方法,并且此方法无法转换为商店表达式。“,”

这是因为包含。我该如何解决这个错误?

1 个答案:

答案 0 :(得分:5)

不要将ids转换为连续字符串,而是将它们保存在List<T>/IEnumerable<T>中,然后对其进行查询:

根据您的评论:

  

ID被定义为string [] 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)但它无法做到。