首页 > 解决方案 > 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()”方法,并且此方法无法转换为存储表达式。

标签: c#unit-testingtestinglinq-to-entitiesnunit

解决方案


我不确定您的代码在生产中如何工作,但根据此链接

这个异常主要发生在我们使用实体框架查询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 类 来获得此功能,而无需进行全表扫描。


推荐阅读