Note that there are some explanatory texts on larger screens.

plurals
  1. POCombine some lambda expressions using Or operand
    primarykey
    data
    text
    <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>
    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.
 

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