Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>After a week of searching of solution I found this <a href="http://blogs.msdn.com/b/alexj/archive/2009/03/26/tip-8-writing-where-in-style-queries-using-linq-to-entities.aspx" rel="nofollow">post</a>. This work great with indexed DB with more than billion rows. Here is my code solution:</p> <pre><code>public static IQueryable&lt;LogViewer.EF.InternetEF.Log&gt; ExecuteInternetGetLogsQuery(FilterCriteria p_Criteria, ref GridView p_Datagrid) { IQueryable&lt;LogViewer.EF.InternetEF.Log&gt; internetQuery = null; List&lt;LogViewer.EF.InternetEF.Log&gt; executedList = null; using (InternetDBConnectionString context = new InternetDBConnectionString()) { internetQuery = context.Logs; if ((p_Criteria.DateTo != null &amp;&amp; p_Criteria.DateFrom != null)) { internetQuery = internetQuery.Where(c =&gt; c.Timestamp &gt;= p_Criteria.DateFrom.Value &amp;&amp; c.Timestamp &lt; p_Criteria.DateTo.Value); } else if (p_Criteria.DateFrom != null &amp;&amp; p_Criteria.DateFrom &gt; DateTime.MinValue) { internetQuery = internetQuery.Where(c =&gt; c.Timestamp &gt;= p_Criteria.DateFrom); } else if (p_Criteria.DateTo != null &amp;&amp; p_Criteria.DateTo &gt; DateTime.MinValue) { internetQuery = internetQuery.Where(c =&gt; c.Timestamp &lt; p_Criteria.DateTo); } if (!string.IsNullOrEmpty(p_Criteria.FreeText)) { internetQuery = internetQuery.Where(c =&gt; c.FormattedMessage.Contains(p_Criteria.FreeText)); } if (p_Criteria.Titles.Count &gt; 0) { internetQuery = internetQuery.Where(BuildOrExpression&lt;LogViewer.EF.InternetEF.Log, string&gt;(p =&gt; p.Title, p_Criteria.Titles)); } if (p_Criteria.MachineNames.Count &gt; 0) { internetQuery = internetQuery.Where(BuildOrExpression&lt;LogViewer.EF.InternetEF.Log, string&gt;(p =&gt; p.MachineName, p_Criteria.MachineNames)); } if (p_Criteria.Severities.Count &gt; 0) { internetQuery = internetQuery.Where(BuildOrExpression&lt;LogViewer.EF.InternetEF.Log, string&gt;(p =&gt; p.Severity, p_Criteria.Severities)); } internetQuery = internetQuery.Take(p_Criteria.TopValue); executedList = internetQuery.ToList&lt;LogViewer.EF.InternetEF.Log&gt;(); executedList = executedList.OrderByDescending(c =&gt; c.LogID).ToList&lt;LogViewer.EF.InternetEF.Log&gt;(); ; p_Datagrid.DataSource = executedList; p_Datagrid.DataBind(); return internetQuery; } } public static Expression&lt;Func&lt;TElement, bool&gt;&gt; BuildOrExpression&lt;TElement, TValue&gt;( Expression&lt;Func&lt;TElement, TValue&gt;&gt; valueSelector, IEnumerable&lt;TValue&gt; values ) { if (null == valueSelector) throw new ArgumentNullException("valueSelector"); if (null == values) throw new ArgumentNullException("values"); ParameterExpression p = valueSelector.Parameters.Single(); if (!values.Any()) return e =&gt; false; var equals = values.Select(value =&gt; (Expression)Expression.Equal( valueSelector.Body, Expression.Constant( value, typeof(TValue) ) ) ); var body = equals.Aggregate&lt;Expression&gt;( (accumulate, equal) =&gt; Expression.Or(accumulate, equal) ); return Expression.Lambda&lt;Func&lt;TElement, bool&gt;&gt;(body, p); } </code></pre> <p>I hope this will usefull for our community Thanks</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