2

我收到错误:

LINQ to Entities does not recognize the method 'Int32 LastIndexOf(System.String)' 
method, and this method cannot be translated into a store expression.

当使用此代码来判断一个人的姓氏是否以某些字符开头时:

persons = persons.Where(c => c.FullName.IndexOf(" ") > 0 &&
c.FullName.Substring(c.FullName.LastIndexOf(" ")+1).StartsWith(lastNameSearch));

任何线索如何在不使用 LastIndexOf() 的情况下实现这一目标?也许我必须在使用 ToList() 从数据库中获取结果后检查这一点?

4

1 回答 1

7

您受到可转换为 SQL 查询的规范函数集的限制,因此任何解决方案都必须仅使用规范函数提供的内容来实现。

幸运的是,支持的功能之一是bool Contains(string)实例方法。您可以将支票重写为

persons = persons.Where(c => c.FullName.Contains(" " + lastNameSearch));

这与您当前的版本不完全一样(因为它允许拥有多个名字的人匹配他们的第二个名字,而前者不会),但它非常接近,恕我直言。

当然,如果可能的话,将姓氏作为一个单独的列保存在数据库中会比任何其他方法都要好得多。

于 2012-11-07T01:34:53.547 回答