В SQL Server 2008 R2 у меня есть контакты с апострофом в именах.
Из приложения ASP.NET MVC 3 + Entity Framework 5, если пользователь ищет «OConnors», я хотел бы показать «O'Connors» также вместе с другими «OConnors», если таковые имеются.
var predicate = PredicateBuilder.True<Contact>();
if (!string.IsNullOrWhiteSpace(firstName.Trim()))
{
predicate = predicate.And(p => p.FirstName.Contains(firstName)
|| SqlFunctions.SoundCode(firstName) == SqlFunctions.SoundCode(p.FirstName));
}
if (!string.IsNullOrWhiteSpace(lastName.Trim()))
{
predicate = predicate.And(p => p.LastName.Contains(lastName)
|| SqlFunctions.SoundCode(lastName) == SqlFunctions.SoundCode(p.LastName));
}
contacts = context.Contacts
.Where(predicate)
.Where(contact=> locationIds.Contains(contact.LocationId));
Приведенный выше код выберет «Найл О'Коннорс», только если пользователь ищет «О'Коннорс».
я пытался
char[] charsToTrim = { '\'' };
predicate = predicate.And(p => p.FirstName.Trim(charsToTrim).Contains(firstName));
но получил эту ошибку: «LINQ to Entities не распознает метод System.String Trim (Char [])», и этот метод не может быть преобразован в выражение хранилища».
(SoundCode также используется для отображения вариантов имени.)