Linq查询可在Web应用程序上运行,但在使用NUnit时会引发错误

时间:2018-07-10 07:41:49

标签: c# unit-testing testing linq-to-entities 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()',并且该方法不能为   转换为商店表达式。

1 个答案:

答案 0 :(得分:5)

我不确定您的代码如何在生产环境中工作,但根据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 来进行此功能而无需全表扫描。