Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

LINQ के बजाय (( NVL(INSTR(x, y), 0) ) =1) का उपयोग करें

जब मैंने अपने आस-पास देखा तो मैंने पाया कि LINQ में LIKE ऑपरेटर जो कुछ अच्छे उदाहरण हैं कि आप यह कैसे कर सकते हैं। मैंने नीचे दिए गए लिंक का परीक्षण किया है जो ऊपर दिए गए लिंक से था

लैम्ब्डा के साथ लाइक का उपयोग करने के लिए यहां एक एक्सटेंशन दिया गया है जिसे adobrzyc . द्वारा पोस्ट किया गया था

    public static class LinqEx
    {
        private static readonly MethodInfo ContainsMethod = typeof(string).GetMethod("Contains");
        private static readonly MethodInfo StartsWithMethod = typeof(string).GetMethod("StartsWith", new[] { typeof(string) });
        private static readonly MethodInfo EndsWithMethod = typeof(string).GetMethod("EndsWith", new[] { typeof(string) });

        public static Expression<Func<TSource, bool>> LikeExpression<TSource, TMember>(Expression<Func<TSource, TMember>> property, string value)
        {
            var param = Expression.Parameter(typeof(TSource), "t");
            var propertyInfo = GetPropertyInfo(property);
            var member = Expression.Property(param, propertyInfo.Name);

            var startWith = value.StartsWith("%");
            var endsWith = value.EndsWith("%");

            if (startWith)
                value = value.Remove(0, 1);

            if (endsWith)
                value = value.Remove(value.Length - 1, 1);

            var constant = Expression.Constant(value);
            Expression exp;

            if (endsWith && startWith)
            {
                exp = Expression.Call(member, ContainsMethod, constant);
            }
            else if (startWith)
            {
                exp = Expression.Call(member, EndsWithMethod, constant);
            }
            else if (endsWith)
            {
                exp = Expression.Call(member, StartsWithMethod, constant);
            }
            else
            {
                exp = Expression.Equal(member, constant);
            }

            return Expression.Lambda<Func<TSource, bool>>(exp, param);
        }

        public static IQueryable<TSource> Like<TSource, TMember>(this IQueryable<TSource> source, Expression<Func<TSource, TMember>> parameter, string value)
        {
            return source.Where(LikeExpression(parameter, value));
        }

        private static PropertyInfo GetPropertyInfo(Expression expression)
        {
            var lambda = expression as LambdaExpression;
            if (lambda == null)
                throw new ArgumentNullException("expression");

            MemberExpression memberExpr = null;

            switch (lambda.Body.NodeType)
            {
                case ExpressionType.Convert:
                    memberExpr = ((UnaryExpression)lambda.Body).Operand as MemberExpression;
                    break;
                case ExpressionType.MemberAccess:
                    memberExpr = lambda.Body as MemberExpression;
                    break;
            }

            if (memberExpr == null)
                throw new InvalidOperationException("Specified expression is invalid. Unable to determine property info from expression.");


            var output = memberExpr.Member as PropertyInfo;

            if (output == null)
                throw new InvalidOperationException("Specified expression is invalid. Unable to determine property info from expression.");

            return output;
        }
    }

इसका उपयोग करने के लिए आप बस लाइक फंक्शन जोड़ें जहाँ आप कंटेन्स फंक्शन डालेंगे। उदाहरण के लिए आप नीचे देख सकते हैं

            using (CustomerEntities customerContext = new CustomerEntities())
            {
                IQueryable<Customer> customer = customerContext.Customer.Like(x => x.psn, "%1%");    
            }

यह एक sql क्वेरी बनाएगा जो कुछ इस तरह दिखती है।

SELECT 
[Extent1].[psn] AS [psn]
FROM [dbo].[Customer] AS [Extent1]
WHERE [Extent1].[psn] LIKE '%1%'



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL में एकाधिक पंक्ति सम्मिलित करें

  2. रोलबैक ऑरैकल में लिक्विबेस का उपयोग करके काम नहीं कर रहा है

  3. पिछले रिकॉर्ड के आधार पर कॉलम अपडेट करना

  4. एक XSD दिनांक xs:dateTime को Oracle दिनांक में कनवर्ट करना

  5. Oracle में NLSSORT () फ़ंक्शन