أين يمكنني العثور على تنفيذ IQueryable للوظيفة Contains في T-SQL؟
في بعض الأحيان، عندما أقوم بتنفيذ الكود التالي:
-
استكشاف أسرار استعلامات SELECT في SQL24/01/2024
-
استعلام MySQL: البحث باستخدام LIKE ومصفوفة29/02/2024
-
استعلامات Laravel: بناء استعلامات قوية30/03/2024
csharpjournals = _context.Journals
.Where(j => j.Name.Contains("foo"));
أشعر بالحاجة إلى التوقف وكتابة تمديد لـ IQueryable
يجعل Contains
يعمل. هل هناك تمديد متوفر بالفعل؟
المزيد من المعلومات
بالطبع! في T-SQL، الدالة التي تقوم بعملية البحث عن نص داخل نص آخر تسمى CHARINDEX
. ولكن، لا توجد تقنية مباشرة في T-SQL لتنفيذ دالة Contains
بنفس الطريقة المستخدمة في LINQ to Entities. بدلاً من ذلك، يمكنك استخدام CHARINDEX
مع LIKE
لتحقيق نتائج مماثلة.
على سبيل المثال، إذا أردت البحث عن جميع السجلات التي تحتوي على “foo” في الحقل Name
، يمكنك استخدام الاستعلام التالي:
sqlSELECT * FROM Journals
WHERE CHARINDEX('foo', Name) > 0;
في هذا الاستعلام، CHARINDEX('foo', Name)
يبحث عن النص “foo” داخل حقل Name
، وإذا وجد النص، فإنه يعيد موقع بداية النص داخل Name
، وإذا لم يجده، فإنه يعيد 0. بالتالي، إذا كانت القيمة التي تعيدها CHARINDEX
أكبر من صفر، فهذا يعني أن النص “foo” تم العثور عليه داخل الحقل Name
.
هذا الاستعلام يعمل بشكل مماثل لكن ليس بنفس الطريقة المباشرة التي تتيحها Contains
في LINQ to Entities.