LINQ에서 "SQL Like"메서드를 찾는 방법을 찾는 것처럼 여기에서 텀블러가 발생하는 사람들에게는 매우 효과적인 것이 있습니다.
열 데이터 정렬을 변경하기 위해 데이터베이스를 변경할 수없는 경우입니다. LINQ에서 할 수있는 방법을 찾아야합니다.
도우미 메서드 SqlFunctions.PatIndex
마녀를 사용하고 실제 SQL LIKE 연산자와 유사하게 작동합니다.
먼저 검색 값에 가능한 모든 분음 부호 (방금 배운 단어)를 열거하여 다음과 같은 결과를 얻습니다.
déjà => d[éèêëeÉÈÊËE]j[aàâäAÀÂÄ]
montreal => montr[éèêëeÉÈÊËE][aàâäAÀÂÄ]l
montréal => montr[éèêëeÉÈÊËE][aàâäAÀÂÄ]l
그런 다음 LINQ에서 예를 들면 다음과 같습니다.
var city = "montr[éèêëeÉÈÊËE][aàâäAÀÂÄ]l";
var data = (from loc in _context.Locations
where SqlFunctions.PatIndex(city, loc.City) > 0
select loc.City).ToList();
그래서 내 필요에 따라 도우미 / 확장 방법을 작성했습니다.
public static class SqlServerHelper
{
private static readonly List<KeyValuePair<string, string>> Diacritics = new List<KeyValuePair<string, string>>()
{
new KeyValuePair<string, string>("A", "aàâäAÀÂÄ"),
new KeyValuePair<string, string>("E", "éèêëeÉÈÊËE"),
new KeyValuePair<string, string>("U", "uûüùUÛÜÙ"),
new KeyValuePair<string, string>("C", "cçCÇ"),
new KeyValuePair<string, string>("I", "iîïIÎÏ"),
new KeyValuePair<string, string>("O", "ôöÔÖ"),
new KeyValuePair<string, string>("Y", "YŸÝýyÿ")
};
public static string EnumarateDiacritics(this string stringToDiatritics)
{
if (string.IsNullOrEmpty(stringToDiatritics.Trim()))
return stringToDiatritics;
var diacriticChecked = string.Empty;
foreach (var c in stringToDiatritics.ToCharArray())
{
var diac = Diacritics.FirstOrDefault(o => o.Value.ToCharArray().Contains(c));
if (string.IsNullOrEmpty(diac.Key))
continue;
//Prevent from doing same letter/Diacritic more than one time
if (diacriticChecked.Contains(diac.Key))
continue;
diacriticChecked += diac.Key;
stringToDiatritics = stringToDiatritics.Replace(c.ToString(), "[" + diac.Value + "]");
}
stringToDiatritics = "%" + stringToDiatritics + "%";
return stringToDiatritics;
}
}
이 방법을 개선 할 제안이 있으시면 기꺼이 도와 드리겠습니다.
5
대한 투표권이 있습니다. sql-like 를 동의어 로 제안하도록 친절하게 요청할 수 있습니까?