c# - Linq Query 适用于 Web 应用程序但使用 NUnit 时抛出错误
问题描述
我的服务上有一个方法,它使用 Linq To Entities 选择如下数据:
var test = _repository.DbSet().
.Select(t => new CustomClass
{
Count = t.Count.ToString(),
}).ToList();
它适用于我的asp.net mvc
应用程序,但通过调用该方法时会引发以下错误Nunit
:
附加信息:LINQ to Entities 无法识别方法“System.String ToString()”方法,并且此方法无法转换为存储表达式。
解决方案
我不确定您的代码在生产中如何工作,但根据此链接:
这个异常主要发生在我们使用实体框架查询SQL数据库的时候。问题是您在 LINQ to Entities 查询(IQueryable 到 IEnumrable)中调用 ToString。这意味着解析器正在尝试将 ToString 调用转换为其等效的 SQL(这是不可能的......因此出现了异常)。
您可以使用.AsEnumerable()
或修复它.ToList()
:
var test = _repository.DbSet().
.AsEnumerable()
.Select(t => new CustomClass
{
Count = t.Count.ToString(),
}).ToList();
根据支持的链接,您可以使用SqlFunctions 类或DbFunctions 类 来获得此功能,而无需进行全表扫描。
推荐阅读
- python - 使用 stderr=PIPE 和 Popen.communicate() 获取竞争条件
- php - 使用php执行powershell命令
- xslt - 仅当任何第 n 个重复子节点包含的日期晚于今天时,才复制重复节点
- mysql - 带有 MySQL 和 EF Core 的 ASP.NET CORE - 多连接字符串处理
- javascript - 在页面加载后使用占位符或动画加载 div,同时加载
- python - 在行为测试中标记不同的示例集
- weka - Weka StringToWordVector 属性省略
- c# - 如何在处理打印请求中提供页面范围
- c++ - 为什么 main 函数首先在 c/c++ 中运行?
- python - Python:使用 struct 模块处理包含数组的结构