Bagi mereka yang tumbang di sini seperti saya mencari cara untuk metode "Seperti SQL" di LINQ, saya memiliki sesuatu yang berfungsi dengan sangat baik.
Saya dalam kasus di mana saya tidak dapat mengubah Database dengan cara apa pun untuk mengubah susunan kolom. Jadi saya sudah menemukan cara di LINQ saya untuk melakukannya.
Saya menggunakan metode pembantu SqlFunctions.PatIndex
tindakan penyihir mirip dengan operator SEPERTI SQL nyata.
Pertama, saya perlu menghitung semua diakritik yang mungkin (kata yang baru saya pelajari) dalam nilai pencarian untuk mendapatkan sesuatu seperti:
déjà => d[éèêëeÉÈÊËE]j[aàâäAÀÂÄ]
montreal => montr[éèêëeÉÈÊËE][aàâäAÀÂÄ]l
montréal => montr[éèêëeÉÈÊËE][aàâäAÀÂÄ]l
dan kemudian di LINQ untuk contoh:
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();
Jadi untuk kebutuhan saya, saya telah menulis metode Helper / Extension
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;
}
}
Jika ada di antara Anda yang memiliki saran untuk meningkatkan metode ini, saya akan senang mendengarkan Anda.
5
suara untuk tag seperti operator . Bisakah saya meminta agar Anda menyarankan seperti sql sebagai sinonim ?