البرمجة

كيفية استخدام CHARINDEX في T-SQL

أين يمكنني العثور على تنفيذ IQueryable للوظيفة Contains في T-SQL؟

في بعض الأحيان، عندما أقوم بتنفيذ الكود التالي:

csharp
journals = _context.Journals .Where(j => j.Name.Contains("foo"));

أشعر بالحاجة إلى التوقف وكتابة تمديد لـ IQueryable يجعل Contains يعمل. هل هناك تمديد متوفر بالفعل؟

المزيد من المعلومات

بالطبع! في T-SQL، الدالة التي تقوم بعملية البحث عن نص داخل نص آخر تسمى CHARINDEX. ولكن، لا توجد تقنية مباشرة في T-SQL لتنفيذ دالة Contains بنفس الطريقة المستخدمة في LINQ to Entities. بدلاً من ذلك، يمكنك استخدام CHARINDEX مع LIKE لتحقيق نتائج مماثلة.

على سبيل المثال، إذا أردت البحث عن جميع السجلات التي تحتوي على “foo” في الحقل Name، يمكنك استخدام الاستعلام التالي:

sql
SELECT * FROM Journals WHERE CHARINDEX('foo', Name) > 0;

في هذا الاستعلام، CHARINDEX('foo', Name) يبحث عن النص “foo” داخل حقل Name، وإذا وجد النص، فإنه يعيد موقع بداية النص داخل Name، وإذا لم يجده، فإنه يعيد 0. بالتالي، إذا كانت القيمة التي تعيدها CHARINDEX أكبر من صفر، فهذا يعني أن النص “foo” تم العثور عليه داخل الحقل Name.

هذا الاستعلام يعمل بشكل مماثل لكن ليس بنفس الطريقة المباشرة التي تتيحها Contains في LINQ to Entities.

زر الذهاب إلى الأعلى