Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>No need to use Expression.Call, you can directly construct Expression Tree instead; I have create a static method which help me generate dynamic query:</p> <pre><code>public static void Test(string[] args) { using (var db = new DBContext()) { //query 1 var query1 = db.PrizeTypes.Where(m =&gt; m.rewards == 1000).Select(t =&gt; t.name); //query 2 which equal to query 1 Expression&lt;Func&lt;PrizeType, bool&gt;&gt; predicate1 = m =&gt; m.rewards == 1000; Expression&lt;Func&lt;PrizeType, string&gt;&gt; selector1 = t =&gt; t.name; var query2 = db.PrizeTypes.Where(predicate1).Select(selector1); Console.WriteLine(predicate1); Console.WriteLine(selector1); Console.WriteLine(); //query 3 which equal to query 1 and 2 Expression&lt;Func&lt;PrizeType, bool&gt;&gt; predicate2 = GetPredicateEqual&lt;PrizeType&gt;("rewards", (Int16)1000); Expression&lt;Func&lt;PrizeType, string&gt;&gt; selector2 = GetSelector&lt;PrizeType, string&gt;("name"); var query3 = db.PrizeTypes.Where(predicate2).Select(selector2); Console.WriteLine(predicate2); Console.WriteLine(selector2); //as you can see, query 1 will equal query 2 equal query 3 } } public static Expression&lt;Func&lt;TEntity, bool&gt;&gt; GetPredicateEqual&lt;TEntity&gt;(string fieldName, object fieldValue) where TEntity : class { ParameterExpression m = Expression.Parameter(typeof(TEntity), "t"); var p = m.Type.GetProperty(fieldName); BinaryExpression body = Expression.Equal( Expression.Property(m, fieldName), Expression.Constant(fieldValue, p.PropertyType) ); return Expression.Lambda&lt;Func&lt;TEntity, bool&gt;&gt;(body, m); } public static Expression&lt;Func&lt;T, TReturn&gt;&gt; GetSelector&lt;T, TReturn&gt;(string fieldName) where T : class where TReturn : class { var t = typeof(TReturn); ParameterExpression p = Expression.Parameter(typeof(T), "t"); var body = Expression.Property(p, fieldName); return Expression.Lambda&lt;Func&lt;T, TReturn&gt;&gt;(body, new ParameterExpression[] { p }); } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload