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

时间:2012-11-07 01:26:39

标签: 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.

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

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

如何在不使用LastIndexOf()的情况下实现此目的?也许在使用ToList()?

从数据库中获取结果后,我必须检查这个

1 个答案:

答案 0 :(得分:7)

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

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

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

这不像你当前的版本完全(因为它允许有多个名字的人匹配他们的第二个名字,而前者不会),但是它非常接近并且恕我直言是可以接受的。

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