【问题标题】:Linq Query Works on Web Application But throws error when using NUnitLinq Query 可在 Web 应用程序上运行,但在使用 NUnit 时会引发错误
【发布时间】:2018-07-10 07:41:48
【问题描述】:

我的服务上有一个方法,它使用 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-testing testing linq-to-entities nunit


    【解决方案1】:

    我不确定您的代码在生产中是如何工作的,但根据this link

    这个异常主要发生在我们使用实体查询SQL数据库的时候 框架。问题是您在 LINQ 中调用 ToString 实体查询(IQueryable 到 IEnumrable)。这意味着解析器是 试图将 ToString 调用转换为其等效的 SQL(其中 不可能...因此例外)。

    您可以使用.AsEnumerable().ToList() 修复它:

    var test = _repository.DbSet().
            .AsEnumerable()
            .Select(t => new CustomClass
            {
                Count = t.Count.ToString(),
            }).ToList();
    

    基于supported link,您可以使用SqlFunctions ClassDbFunctions Class 来获得此功能,而无需进行全表扫描。

    【讨论】:

      猜你喜欢
      • 2019-05-06
      • 2019-03-26
      • 2012-05-09
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多