NHibernate - أسهل طريقة لإجراء بحث LIKE مقابل عمود صحيح باستخدام Criteria API؟

StackOverflow https://stackoverflow.com/questions/1231054

  •  22-07-2019
  •  | 
  •  

سؤال

أحاول إجراء بحث مماثل مقابل عمود عدد صحيح، ما أحتاج إلى فعله هو تحويل العمود إلى varchar ثم إجراء البحث المماثل.هل هذا ممكن؟ما هي أسهل طريقة للقيام بذلك باستخدام Criteria API؟

var search = "123";
criteria.Add(Restrictions.Like("Number", "%" + search + "%"))
هل كانت مفيدة؟

المحلول

إذا كان Number عبارة عن سلسلة، فسيكون الأمر سهلاً:

.Add(Restrictions.Like("Number", "some_value",MatchMode.Anywhere))

نظرًا لأن لديك رقمًا، فسيقوم NHibernate بالتحقق من نوع الرقم وإذا أعطيته سلسلة، فسيطرح استثناءً.

لست متأكدًا من سبب عدم قيام فريق NH بتوفير تحميل زائد للكائن كمعلمة ومعلمات MatchMode ....

على أية حال، لا يزال بإمكانك القيام بذلك على النحو التالي:

.Add(Expression.Sql("{alias}.Number like ?", "%2%", NHibernateUtil.String))

يحرر

حول الاسم المستعار:

(لا أستطيع العثور على المكان الذي تتحدث فيه الوثائق عن هذا ولكن هذا ما أفهمه)

يعرض {alias} الاسم المستعار المستخدم داخل NH لأحدث CreateCriteria.لذلك إذا كان لديك:

session.CreateCriteria<User>("firstAlias")
       .CreateCriteria("firstAlias.Document", "doc")
       .Add(Expression.Sql("{alias}.Number like ?", "%2%",  
                           NHibernateUtil.String)).List<User>();

سيكون {alias} في هذه الحالة هو "doc" - لذا سينتهي بك الأمر بـ:رقم الوثيقة .

لذا، استخدم دائمًا {alias} بعد CreateCriteria الاسم المستعار الخاص به الذي تحتاج إلى استخدامه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top