Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Remove the parameters <code>columnFilter</code> and <code>expression</code> and instead pass your data in a collection of <code>columnsFilter</code> and <code>expression</code>. You can create a custom class or just use a list of <code>Tuple&lt;string,string&gt;</code> like this:</p> <pre><code>public static DataTable Page(DataTable dataTableToPage, int pageSize, int pageNumber, IList&lt;Tuple&lt;string, string&gt;&gt; columnToExpression, out int totalrecords, Operator Operator) </code></pre> <p>To create the Tuple you are doing something like this:</p> <pre><code>var colsExps = new List&lt;Tuple&lt;string, string&gt;&gt;(); colsExps.Add(new Tuple&lt;string,string&gt;("Name", "John")); colsExps.Add(new Tuple&lt;string,string&gt;("City", "Miami")); </code></pre> <p>Then modify the code in your queries to something like this:</p> <pre><code>if (Operator == Operator.Equal) { query = (from dr in dataTableToPage.AsEnumerable() select dr); foreach (var pair in columnToExpression) { string columnFilter = pair.Item1; string expression = pair.Item2; query = query.Where (dr =&gt; dr[columnFilter].ToString() == expresion); } } else if(Operator == Operator.Like) { query = (from dr in dataTableToPage.AsEnumerable() select dr); foreach (var pair in columnToExpression) { string columnFilter = pair.Item1; string expression = pair.Item2; query = query.Where (dr =&gt; dr[columnToFilter].ToString().IndexOf(expression, StringComparison.OrdinalIgnoreCase) &gt;= 0); } } </code></pre> <p>Alternatively, you can use <a href="http://www.albahari.com/nutshell/predicatebuilder.aspx" rel="nofollow"><code>PredicateBuilder</code></a>:</p> <pre><code>query = (from dr in dataTableToPage.AsEnumerable() select dr); // I'm not sure exactly what T you should be using in the following statement: // DataRow should be the type of dr var predicate = PredicateBuilder.False&lt;DataRow&gt;(); foreach (var pair in columnToExpression) { string columnFilter = pair.Item1; string expression = pair.Item2; predicate = predicate.Or(dr =&gt; dr[columnFilter].ToString() == expresion); } query = query.Where(predicate.Compile()); </code></pre> <p>Since I haven't test this, I wonder if you need to do <code>dataTableToPage.AsQueryable()</code> instead of <code>AsEnumerable()</code>?</p>
 

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