Đối với những người ở đây như tôi đang tìm cách chuyển sang phương thức "SQL Like" trong LINQ, tôi đã làm việc rất tốt.
Tôi đang ở trong trường hợp tôi không thể thay đổi Cơ sở dữ liệu theo bất kỳ cách nào để thay đổi đối chiếu cột. Vì vậy, tôi phải tìm một cách trong LINQ của mình để làm điều đó.
Tôi đang sử dụng phương thức SqlFunctions.PatIndex
phù thủy phương thức trợ giúp hoạt động tương tự như toán tử SQL THÍCH thực sự.
Đầu tiên tôi cần liệt kê tất cả các dấu phụ có thể (một từ mà tôi vừa học) trong giá trị tìm kiếm để có được một cái gì đó như:
déjà => d[éèêëeÉÈÊËE]j[aàâäAÀÂÄ]
montreal => montr[éèêëeÉÈÊËE][aàâäAÀÂÄ]l
montréal => montr[éèêëeÉÈÊËE][aàâäAÀÂÄ]l
và sau đó trong LINQ cho ví dụ:
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();
Vì vậy, đối với nhu cầu của tôi, tôi đã viết một phương thức Trợ giúp / Gia hạn
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;
}
}
Nếu bất kỳ ai trong số các bạn có đề xuất cải tiến phương pháp này, tôi sẽ vui lòng nghe bạn.
5
phiếu bầu cho thẻ nhà điều hành tương tự . Tôi có thể vui lòng yêu cầu bạn đề xuất như sql như một từ đồng nghĩa không?