Linq to Entities' dynamic where clause

dynamic entity-framework linq where-clause


I'm using linq to entities(EF). I have a constructor which takes 4 string parameters. Depending on what parameter is not null I have to build the linq query. I can do with if else statements but i also has other constructor with 10 parameters in that case there will be many combinations to check.


  var prod= from p in ctxt.products.expand("items\details")
            where p.x==p1 && p.xx==p2 && && p.xxxx==p4
            select p;

In the above where clause there should be condition checks only if the parameter is not null. ie., if p2 is null then the where clause should look like

where p.x==p1 && && p.xxxx==p4

if p2 and p3 are null then

where p.x==p1 && p.xxxx==p4

Can anyone tell me how to handle this. if possible can you give sample code for this

2/3/2012 12:45:38 AM

Accepted Answer

Linq's DeferredExecution to rescue. Linq query is not executed unless the data is requested from it.

var prod = from p in ctxt.products.expand("items\details")
        select p;

if (p1 != null)
    prod = prod.Where(p => p.x == p1);

if (p2 != null)
    prod = prod.Where(p => p.xx == p2);

// Execute the query

var prodResult = prod.ToList();
2/3/2012 12:48:09 AM

Popular Answer

You could always build the query in pieces and take advantage of delayed query execution:

public Constructor(int? p1, int? p2, int? p3, int? p4)
    var prod = ctxt.products.expand("items\details");

    if(p1 != null)
        prod = prod.Where(p.x == p1);

    if(p2 != null)
        prod = prod.Where(p.xx == p2);

    if(p3 != null)
        prod = prod.Where( == p3);

    if(p4 != null)
        prod = prod.Where(p.xxxx == p4);

Related Questions


Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow