score:1

take a look at the answer i gave for this question:

best practices for building a search app?

score:2

i think i'd use extension methods on ienumerable instead of dynamic linq.

var result = from v in users
             join d in orders on v.userid equals d.userid
             where v.username.contains(username)
             where v.firstname.equals(firstname)
             where v.zipcity.equals(zipcity)
             where v.orderdate >= orderdate && v.orderdate < orderdate
             select v.email, v.shippingcity, v.trackingno, d.productid;

if (!string.isnullorempty(productname))
{
   result = result.join( products.where( p=> p.productname == productname ),
                         d => d.productid,
                         p => p.productid,
                         (d,p) => new
                                  {
                                      d.email,
                                      d.shippingcity,
                                      d.trackingno
                                  });
}

Related Query

More Query from same tag