Advertisement
RafalTynski

WhereKeyNumberLp

Oct 11th, 2012
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.12 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data.Objects;
  4. using System.Linq;
  5. using System.Linq.Expressions;
  6. using System.Text;
  7.  
  8. namespace MRPRINT.COM.PL.WWW.Portal.DB.Key
  9. {
  10.     public class KeyNumerLp
  11.     {
  12.         public KeyNumerLp()
  13.         {
  14.             Lp = 0;
  15.             Typ = 0;
  16.             Numer = 0;
  17.  
  18.         }
  19.         public int Numer { get; set; }
  20.         public short Typ { get; set; }
  21.         public short Lp { get; set; }
  22.     }
  23.     public static class KeyNumberLpExt
  24.     {
  25.         public static IQueryable<TEntity> WhereKeyNumberLp<TEntity>(this ObjectQuery<TEntity> query,
  26.                                                                 Expression<Func<TEntity, int>> selectorNumer,
  27.                                                                 Expression<Func<TEntity, short>> selectorTyp,
  28.                                                                 Expression<Func<TEntity, short>> selectorLp,
  29.                                                                 IEnumerable<KeyNumerLp> collection)
  30.         {
  31.             if (selectorNumer == null || selectorTyp == null || selectorLp == null)
  32.                 throw new ArgumentNullException("selector");
  33.             if (collection == null)
  34.                 throw new ArgumentNullException("collection");
  35.  
  36.             ParameterExpression parametrsNumber = selectorNumer.Parameters.Single();
  37.             ParameterExpression parametrsTyp = selectorTyp.Parameters.Single();
  38.             ParameterExpression parametrsLp = selectorLp.Parameters.Single();
  39.  
  40.             if (!collection.Any())
  41.                 return query;
  42.             IEnumerable<Expression> equals = collection.Select
  43.                 (
  44.                     value =>
  45.                     {
  46.                         var exNumber = (Expression)Expression.Equal(selectorNumer.Body, Expression.Constant(value.Numer, typeof(int)));
  47.                         var exTyp = (Expression)Expression.Equal(selectorTyp.Body, Expression.Constant(value.Typ, typeof(short)));
  48.                         var exLp = (Expression)Expression.Equal(selectorLp.Body, Expression.Constant(value.Lp, typeof(short)));
  49.                         return (Expression)Expression.And(((Expression)Expression.And(exNumber, exTyp)), exLp);
  50.                     }
  51.                 );
  52.             Expression body = equals.Aggregate((accumulate, equal) => Expression.Or(accumulate, equal));
  53.             var lExpresion = Expression.Lambda<Func<TEntity, bool>>(body, parametrsNumber, parametrsTyp, parametrsLp);
  54.             var retQuery = query.Where(lExpresion); ;
  55.             return retQuery;
  56.         }
  57.     }
  58. }
  59.  
  60.  
  61.  
  62. //---------------------------------------------------
  63. //EXECUTING
  64. List<KeyNumerLp> key = new List<KeyNumerLp>() { new KeyNumerLp() { Numer = 1, Lp = 1, Typ = 2 }, new KeyNumerLp() { Numer = 1, Lp = 1, Typ = 3 } };
  65.                 var query = ent.CDNXL_TwrKarty.WhereKeyNumberLp(
  66.                         t => t.Twr_GIDNumer,
  67.                         n => n.Twr_GIDTyp.Value,
  68.                         m => m.Twr_GIDLp.Value, key);
  69.                 var qsql = (ObjectQuery)query;
  70.                 string sql = qsql.ToTraceString();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement