LINQ bir "SQL Like" yöntemi için bir yol arayan burada benim gibi takla olanlar için, çok iyi çalışan bir şey var.
Ben sütun harmanlamasını değiştirmek için herhangi bir şekilde Veritabanı değiştiremiyorum bir durumda değilim. Bu yüzden LINQ'umda bunu yapmanın bir yolunu bulmalıyım.
Yardımcı yöntemi kullanıyorum SqlFunctions.PatIndex
cadı gerçek SQL LIKE operatörüne benzer şekilde kullanıyorum.
Öncelikle, arama değerinde olası tüm aksanları (az önce öğrendiğim bir kelime) numaralandırmam gerekiyor:
déjà => d[éèêëeÉÈÊËE]j[aàâäAÀÂÄ]
montreal => montr[éèêëeÉÈÊËE][aàâäAÀÂÄ]l
montréal => montr[éèêëeÉÈÊËE][aàâäAÀÂÄ]l
ve sonra örnek için LINQ'da:
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();
Bu yüzden ihtiyaçlarım için bir Yardımcı / Genişletme yöntemi yazdım
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;
}
}
Herhangi birinizin bu yöntemi geliştirmek için öneriniz varsa, lütfen sizi duymak isterim.
5
için oy kullanıyor . Eşanlamlı olarak sql-like önermenizi rica edebilir miyim ?