affiliate marketing Dot Net Posts: Lamda expression dynamically add where condition

Friday, 24 June 2011

Lamda expression dynamically add where condition

using System;
using System.Linq;
using System.Linq.Expressions;
using System.Collections.Generic;
public static class PredicateBuilder
{
public static Expression> True () { return f => true; }
public static Expression> False () { return f => false; }
public static Expression> Or (this Expression> expr1,Expression> expr2)
{
var invokedExpr = Expression.Invoke (expr2, expr1.Parameters.Cast ());
return Expression.Lambda>(Expression.OrElse (expr1.Body, invokedExpr), expr1.Parameters);
}
public static Expression> And (this Expression> expr1,Expression> expr2)
{
var invokedExpr = Expression.Invoke (expr2, expr1.Parameters.Cast ());
return Expression.Lambda>(Expression.AndAlso (expr1.Body, invokedExpr), expr1.Parameters);
}
}
Using Predicate builder it is developed using lamda expressions for dynamically add and ,or condition in where query in Linqtosql.
 var predicate = PredicateBuilder.True();(Here ICP_ServiceProvider is Data base table)
string temp = Item.Value;
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
switch (Item.Target.ToUpper())
{
case "MFGACCTNUM":
if (Item.LogicalOperation.ToUpper() == "AND")
predicate = predicate.And(p => p.MfgAcctNum.StartsWith(temp));
else
predicate = predicate.Or(p => p.MfgAcctNum.StartsWith(temp));
break;
case "HVACPID":
if (Item.LogicalOperation.ToUpper() == "AND")
predicate = predicate.And(p => p.HVACPId.StartsWith(temp));
else
predicate = predicate.Or(p => p.HVACPId.StartsWith(temp));
break;
case "DISTRIBUTOR":
if (Item.LogicalOperation.ToUpper() == "AND")
predicate = predicate.And(p => p.Distributor.StartsWith(temp));
else
predicate = predicate.Or(p => p.Distributor.StartsWith(temp));
break;
default:
break;
}
}
var tmpdb = (from _ServiceProvider in PHDBContext.ICP_ServiceProviderMasters.Where(predicate)

No comments:

Post a Comment