LINQ में "SQL लाइक" मेथड की राह देख रहे लोग मेरे लिए यहां कैसे आते हैं, इसके लिए मेरे पास कुछ ऐसा है जो बहुत अच्छा काम कर रहा है।
मैं ऐसे मामले में हूं जहां मैं कॉलम को बदलने के लिए डेटाबेस को किसी भी तरह से बदल नहीं सकता। इसलिए मुझे इसे करने के लिए अपने 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- जैसा सुझाव दें ?