将Char转换为String时,为什么LINQ表达式"不支持"?

Yod*_*oda 4 c# linq entity-framework

如果我firstLetterOfLastName通过""在表达式中添加空字符串来转换为字符串,则在尝试将结果转换为时,会出现以下异常List:

EntityFramework.SqlServer.dll中发生了'System.NotSupportedException'类型的第一次机会异常

麻烦的代码:

 public ActionResult Index(char firstLetterOfLastName = 'A') {
            var queryResult = db.Persons.Where(person => person.LastName.StartsWith(firstLetterOfLastName + ""))
            .OrderBy(person => person.Id);       
            var list = queryResult.ToList(); // EXCEPTION
            return View(list);
        }
Run Code Online (Sandbox Code Playgroud)

但是,当我在LINQ表达式之外进行转换时,如下所示:

public ActionResult Index(char firstLetterOfLastName = 'A') {
        string flofnAsString = firstLetterOfLastName + "";
        var queryResult = db.Persons.Where(person => person.LastName.StartsWith(flofnAsString + ""))
        .OrderBy(person => person.Id);
        var list = queryResult.ToList();
        return View(list);
    }
Run Code Online (Sandbox Code Playgroud)

没有问题.为什么会这样?

Ser*_*rvy 5

该错误告诉您确切原因.查询提供程序不知道如何将该操作映射到SQL.当您在应用程序中执行该操作并将其评估为其值时,它确实知道如何处理该操作的结果.

  • @ user2864740并且`+`运算符没有重载来接受类型`char`的第一个参数.唯一适用的重载是接受`object`类型的参数,`char`是一个有效的操作数. (3认同)
  • @Servy啊.我知道了.考虑将相关的评论信息移动到响应本身(目前很漂亮......缺乏细节). (3认同)