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

我得到这个异常:

LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression.","

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

最佳答案

而不是转换您的 ids连接字符串,将它们保存在 List<T>/IEnumerable<T> 中然后像这样查询:

根据您的评论:

Ids are defined as string[] ids

您应该将它们转换为 IEnumerable<int>List<int>喜欢:

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

然后在您的查询中:

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

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

您收到异常的原因是调用了 ToString在您的 LINQ 查询中,提供程序试图将其转换为放置数据源语言(可能是 SQL),但它不能。

关于c# - 尝试在 Linq 中使用包含时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26413117/

相关文章:

c# - 如何正确使用 LINQ to XML?

c# - 我无法让分页显示在以列表为源的 GridView 的每个页面中

c# - 如何使用 linq 进行异步

c# - Linq to objects - 选择第一个对象

c# - 在 linq 中构建对象 - 添加依赖于其他属性的属性

linq - 当 LINQ Count() 方法不起作用时,从 Netflix oData 服务返回计数

C#- TreeView : inserting node at certain position

c# - 我是否在我的一个页面中滥用了 WebMatrix 的 AntiForgery.Validate 助手?

c# - 如何防止 ASP.net 中的无限循环

c# - 如何获取调用 MemberExpression 的类型?