.net - লিঙ্কে কি ভাবে এসকিউএল করবেন?



linq tsql (9)

আমার এসকিউএল-এ একটি পদ্ধতি রয়েছে যা আমি লিংকে পরিণত করার চেষ্টা করছি:

SELECT O.Id, O.Name as Organization
FROM Organizations O
JOIN OrganizationsHierarchy OH ON O.Id=OH.OrganizationsId
where OH.Hierarchy like '%/12/%'

লাইন আমি সবচেয়ে উদ্বিগ্ন হয়:

where OH.Hierarchy like '%/12/%'

আমার একটি কলাম আছে যা হায়ারারিকে / 1/3/12 / যেমন উদাহরণস্বরূপ সঞ্চয় করে তাই আমি এটি অনুসন্ধানের জন্য% / 12 /% ব্যবহার করি।

আমার প্রশ্ন হলো, লিনক বা নেটের শতকরা চিহ্ন ব্যবহার করে সমতুল্য কি?


Answer #1

.NET কোর এখন EF.Functions.Like


Answer #2

LINQ এ "এসকিউএল লাইক" পদ্ধতির দিকে তাকানোর জন্য আমার মতো এখানে কীভাবে ছড়িয়ে পড়েছে, আমার এমন কিছু আছে যা খুব ভাল কাজ করছে।

আমি একটি ক্ষেত্রে যেখানে আমি কলাম সংযোজন পরিবর্তন করতে কোন ভাবেই ডাটাবেস পরিবর্তন করতে পারবেন না। তাই আমার LINQ এ এটি করার একটি উপায় খুঁজে বের করতে হবে।

আমি আসল এসকিউএল SqlFunctions.PatIndex মতো সহায়ক পদ্ধতি SqlFunctions.PatIndex অ্যাক্ট ব্যবহার করছি।

প্রথমে আমি অনুসন্ধানের মূল্যে সমস্ত সম্ভাব্য সংশ্লেষ (একটি শব্দ যা আমি শিখেছি) সংজ্ঞায়িত করতে চাই:

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;
        }
    }

যদি আপনার এই পদ্ধতিটি উন্নত করার পরামর্শ থাকে তবে আমি আপনাকে শুনতে চাই।


Answer #3

আমি অনুমান করছি আপনি লিঙ্ক-টু-এসকিউএল * ব্যবহার করছেন (নীচের নোট দেখুন)। যদি তাই হয়, স্ট্রিং ব্যবহার করুন। শর্তাবলী, স্ট্রিং। টার্টস সহ, এবং স্ট্রিং.এন্ডু এসকিউএল উৎপন্ন করার জন্য এসকিউএল লাইক অপারেটর ব্যবহার করে।

from o in dc.Organization
join oh in dc.OrganizationsHierarchy on o.Id equals oh.OrganizationsId
where oh.Hierarchy.Contains(@"/12/")
select new { o.Id, o.Name }

অথবা

from o in dc.Organization
where o.OrganizationsHierarchy.Hierarchy.Contains(@"/12/")
select new { o.Id, o.Name }

দ্রষ্টব্য: * = যদি আপনি .নেট 3.5 এ ADO.Net Entity Framework (EF / L2E) ব্যবহার করছেন তবে সচেতন থাকুন যে এটি লিংক-টু-SQL হিসাবে একই অনুবাদ করবে না। যদিও L2S একটি সঠিক অনুবাদ করে, L2E v1 (3.5) একটি টি-এসকিউএল এক্সপ্রেশনতে অনুবাদ করবে যা আপনার জিজ্ঞাসা করা টেবিলের উপর সম্পূর্ণ টেবিল স্ক্যানকে জোর দেবে যদি না আপনার ক্লোজ বা ফিল্টারগুলিতে যোগদানকারী অন্য কোনও ভাল বৈষম্যকারী হয়।
আপডেট: এটি EF / L2E v4 (.net 4.0) এ সংশোধন করা হয়েছে, তাই এটি L2S এর মতো একটি SQL লাইক তৈরি করবে।


Answer #4

আমি সর্বদা এই কাজ করি:

from h in OH
where h.Hierarchy.Contains("/12/")
select h

আমি জানি আমি এই ধরনের বিবৃতি ব্যবহার করি না কিন্তু এটি ব্যাকগ্রাউন্ডে ভাল কাজ করে এটি একটি মতামত দিয়ে একটি প্রশ্নের মধ্যে অনুবাদ করা হয়।


Answer #5

এটা ব্যবহার কর:

from c in dc.Organization
where SqlMethods.Like(c.Hierarchy, "%/12/%")
select *;

Answer #6

ভাল indexOf আমার জন্য কাজ করে

var result = from c in SampleList
where c.LongName.IndexOf(SearchQuery) >= 0
select c;

Answer #7

যেমন কোড ব্যবহার করুন

try
{
    using (DatosDataContext dtc = new DatosDataContext())
    {
        var query = from pe in dtc.Personal_Hgo
                    where SqlMethods.Like(pe.nombre, "%" + txtNombre.Text + "%")
                    select new
                    {
                        pe.numero
                        ,
                        pe.nombre
                    };
        dgvDatos.DataSource = query.ToList();
    }
}
catch (Exception ex)
{
    string mensaje = ex.Message;
}

Answer #8

লিংক ব্যবহার করা হয়, শুধু ভালো লেগেছে SQL এ ব্যবহৃত হয়।

string _search="/12/";

। । ।

.Where(s => s.Hierarchy.Contains(_search))

আপনি নিম্নলিখিত হিসাবে লিঙ্ক আপনার এসকিউএল স্ক্রিপ্ট লিখতে পারেন:

 var result= Organizations.Join(OrganizationsHierarchy.Where(s=>s.Hierarchy.Contains("/12/")),s=>s.Id,s=>s.OrganizationsId,(org,orgH)=>new {org,orgH});

Answer #9
.Where(oh => oh.Hierarchy.Contains("/12/"))

এছাড়াও আপনি ব্যবহার করতে পারেন .StartsWith() বা .EndsWith()





sql-like