using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Linq.Dynamic;
public static void Main(string[] args)
List<Object> _dynamicObjectList = new List<Object>();
for (int i = 0; i < 5; i++)
_dynamicObjectList.Add(new { ID = i, Name = "stu" + i, Address = "address234324" + i ,DateField =DateTime.Now.AddDays(i) });
test.AddToSearchCriteria("ID", "1,2");
test.AddToSearchCriteria("Name", "\"stu1\",\"stu2\"");
test.AddToSearchCriteria("DateField", test.ToDateRange(dateFrom:DateTime.Now,dateTo:DateTime.Now.AddDays(2)));
var returnList = _dynamicObjectList.GetFilteredData();
Console.WriteLine(returnList.Count());
private static List<object> objSearchCriteriaList = new List<object>();
public static void AddToSearchCriteria(string propertyName, string propertyValue)
if (!string.IsNullOrEmpty(propertyValue))
objSearchCriteriaList.Where(m => ((dynamic)m).PropertyName == (dynamic)propertyName).ToList();
if (checkList.Count == 0)
objSearchCriteriaList.Add(
PropertyName = (dynamic)propertyName,
PropertyValue = (dynamic)propertyValue
public static string ToDateRange(DateTime dateFrom, DateTime dateTo)
return dateFrom.ToShortDateString() + "#***#**#**" + dateTo.ToShortDateString();
public static string CreateSearchString()
string opertator = " || ";
StringBuilder searchStr = new StringBuilder();
foreach (var objectSerach in objSearchCriteriaList)
if (((dynamic)objectSerach).PropertyValue.Contains("#***#**#**"))
string dateStr = ((dynamic)objectSerach).PropertyValue.Replace("#***#**#**", "#");
var listOfDate = dateStr.Split('#');
if (searchStr.Length == 0)
searchStr.AppendFormat("it." + ((dynamic)objectSerach).PropertyName + ".ToShortDateString() >= \"{0}\" && " + "it." + ((dynamic)objectSerach).PropertyName +
".ToShortDateString()<= \"{1}\"", listOfDate[0], listOfDate[1]);
searchStr.AppendFormat("|| it." + ((dynamic)objectSerach).PropertyName + ".ToShortDateString() >= \"{0}\" && " + "it." + ((dynamic)objectSerach).PropertyName +
".ToShortDateString() <= \"{1}\"", listOfDate[0], listOfDate[1]);
var paramValues = ((dynamic)objectSerach).PropertyValue.Split(',');
foreach (var param in paramValues)
if (searchStr.Length == 0)
searchStr.Append("it." + ((dynamic)objectSerach).PropertyName + "= " + param);
searchStr.Append(opertator + " it." + ((dynamic)objectSerach).PropertyName + "= " + param);
objSearchCriteriaList.Clear();
return searchStr.ToString();
public static IQueryable GetFilteredData<T>(this IEnumerable<T> source)
string searchCriteria = CreateSearchString();
if (!string.IsNullOrEmpty(searchCriteria))
IList<T> returnList = new List<T>();
returnList = source.AsQueryable().Where(searchCriteria).ToList();
return returnList.AsQueryable();
return source.AsQueryable();