Note that there are some explanatory texts on larger screens.

plurals
  1. POCombine some lambda expressions using Or operand
    text
    copied!<p>I want to make a dynamic expression which will be generated out of an unknown number of <code>Or</code> conditions:</p> <pre><code> IQueryable&lt;Entity&gt; entities = Repository&lt;Entity&gt;.Load(); Expression&lt;Func&lt;Entity, bool&gt;&gt; wholeFilter; foreach(condition in Conditions) { Expression&lt;Func&lt;Entity, bool&gt;&gt; filter = e =&gt; e.something1 == condition.First &amp;&amp; e.something2 == condition.Second wholeFilter = wholeFilter.Or(filter) } return entities.Where(wholeFilter); </code></pre> <p>I tried to implement the <code>Or</code> extension but I couldn't come up with a logical way. </p> <p>Moreover I was playing around the <a href="http://www.albahari.com/nutshell/predicatebuilder.aspx" rel="nofollow">PredicateBuilder</a> and wrote something like:</p> <pre><code>var predicate = PredicateBuilder.False&lt;Entity&gt;(); </code></pre> <p>and the code below in my loop:</p> <pre><code>predicate = predicate.Or(filter); </code></pre> <p>However I realized that it just <code>And</code> the conditions together not <code>Or</code> them....</p> <p>Any idea how to generate the combined expression?<br> regards</p> <p><strong>EDIT :</strong><br> the original code that I wrote :</p> <pre><code>public IQueryable&lt;IEntity&gt; Find(IEntityType entityType, List&lt;AdaptiveObjectModelSpecification&gt; queryObjecs) { if (entityType == null) return null; var predicate = PredicateBuilder.False&lt;IEntity&gt;(); var entities = Repository&lt;IEntity&gt;.Find(p =&gt; p.EntityType == entityType); if (queryObjecs != null) { foreach (var queryObject in queryObjecs) { if (entityType.PropertyTypes.Count(p =&gt; p.PropertyName == queryObject.PropertyType.PropertyName) == 0) throw new MissingFieldException(String.Format("Column {0} not found.", queryObject.PropertyType.PropertyName)); predicate = predicate.Or(e =&gt; e.Properties.Any(p =&gt; p.Value == queryObject.SearchValue &amp;&amp; p.PropertyType.PropertyName == queryObject.PropertyType.PropertyName)); } entities = entities.Where(predicate); } return entities; } </code></pre> <p>generated entities.Expression.ToString() when queryObjects has two elements =</p> <pre><code>{value(NHibernate.Linq.NhQueryable`1[Azarakhsh.Domain.Core.AdaptiveObjectModel.Interface.IEntity]) .Where(p =&gt; (p.EntityType == value(Azarakhsh.Domain.Core.AdaptiveObjectModel.Service.AdaptiveObjectModelRepositoryService+&lt;&gt;c__DisplayClassd).entityType)) // The line below is generated by PredicateBuilder .Where( Param_0 =&gt; ((False OrElse Invoke(e =&gt; e.Properties.Any(p =&gt; ((p.Value == value(Azarakhsh.Domain.Core.AdaptiveObjectModel.Service.AdaptiveObjectModelRepositoryService+&lt;&gt;c__DisplayClass10).queryObject.SearchValue) AndAlso (p.PropertyType.PropertyName == value(Azarakhsh.Domain.Core.AdaptiveObjectModel.Service.AdaptiveObjectModelRepositoryService+&lt;&gt;c__DisplayClass10).queryObject.PropertyType.PropertyName))), Param_0)) OrElse Invoke(e =&gt; e.Properties.Any(p =&gt; ((p.Value == value(Azarakhsh.Domain.Core.AdaptiveObjectModel.Service.AdaptiveObjectModelRepositoryService+&lt;&gt;c__DisplayClass10).queryObject.SearchValue) AndAlso (p.PropertyType.PropertyName == value(Azarakhsh.Domain.Core.AdaptiveObjectModel.Service.AdaptiveObjectModelRepositoryService+&lt;&gt;c__DisplayClass10).queryObject.PropertyType.PropertyName))), Param_0)))} </code></pre>
 

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