使用LINQ to Entities获取最后一个字符索引

Dav*_*ret 2 c# linq-to-entities

我收到错误:

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

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

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

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

Jon*_*Jon 7

您受限于可以转换为SQL查询的规范函数集,因此任何解决方案都必须通过规范函数提供来实现.

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

persons = persons.Where(c => c.FullName.Contains(" " + lastNameSearch));
Run Code Online (Sandbox Code Playgroud)

这与您当前的版本不完全相同(因为它允许具有多个名称的人匹配他们的第二个名称,而前者不会),但它非常接近并且恕我直言可以接受.

当然,如果可能的话,将姓氏保留为数据库中的单独列会比任何一个好得多.