code_junkie

Generic LINQ query predicate?

Nov 11th, 2011
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 KB | None | 0 0
  1. string[] arrayOfQueryTerms = getsTheArray();
  2.  
  3. var somequery = from q in dataContext.MyTable
  4. select q;
  5.  
  6. if (arrayOfQueryTerms.Length == 1)
  7. {
  8. somequery = somequery.Where<MyTableEntity>(
  9. e => e.FieldName.StartsWith(arrayOfQueryTerms[0]));
  10. }
  11. else
  12. {
  13. foreach(string queryTerm in arrayOfQueryTerms)
  14. {
  15. if (!String.IsNullOrEmpty(queryTerm))
  16. {
  17. somequery = somequery
  18. .Where<MyTableEntity>(
  19. e => e.FieldName.Contains(queryTerm));
  20. }
  21. }
  22. }
  23.  
  24. private IQueryable<T> getQuery(
  25. T MyTableEntity, string[] arrayOfQueryTerms, Func<T, bool> predicate)
  26.  
  27. e => e.FieldName.Contains(queryTerm)
  28.  
  29. var query = dataSource.Where("CategoryID == 2 && UnitPrice > 3")
  30. .OrderBy("SupplierID");
  31.  
  32. IQueryable<T> getQuery<T>( T myTableEntity
  33. , string[] arrayOfQueryTerms
  34. , Expression<Func<T, bool>> predicate)
  35. { var fieldOrProperty = getMemberInfo(predicate);
  36. /* ... */
  37. }
  38.  
  39. MemberInfo getmemberInfo<T>(Expression<Func<T,bool> expr)
  40. { var memberExpr = expr as MemberExpression;
  41. if (memberExpr != null) return memberExpr.Member;
  42. throw new ArgumentException();
  43. }
  44.  
  45. var q = getQuery<FooTable>(foo, new[]{"Bar","Baz"}, x=>x.FieldName);
Add Comment
Please, Sign In to add comment