使用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()从数据库中获取结果后我必须检查这个?
您受限于可以转换为SQL查询的规范函数集,因此任何解决方案都必须通过规范函数提供来实现。
幸运的是,支持的函数之一是bool Contains(string)
实例方法。 您可以将支票重写为
persons = persons.Where(c => c.FullName.Contains(" " + lastNameSearch));
这与您当前的版本不完全相同 (因为它允许具有多个名称的人匹配他们的第二个名称,而前者不会),但它非常接近并且恕我直言可以接受。
当然,如果可能的话,将姓氏保留为数据库中的单独列会比任何一个好得多。