Transforming http request into linq query
Here's a stab at making it a tad more performant while simplifying the syntax a bit:

//case where an array of possible values is sent
private const string MyRegex = "\\[.*\\]";

private static readonly Regex replacer = new Regex(MyRegex, RegexOptions.Compiled);

public IList&lt;Lead&gt; GetLeads(NameValueCollection nvc)
{
    var queryBase = QueryBase();

    foreach (var key in nvc.Cast&lt;string&gt;().Where(key =&gt; nvc[key] != "all"))
    {
        // case where an array of possible values is sent
        Expression&lt;Func&lt;MyContext, bool&gt;&gt; predicate = c =&gt; false;

        foreach (var value in nvc[key].Split(','))
        {
            const string Format = "dd-MM-yyyy";
            Expression&lt;Func&lt;MyContext, bool&gt;&gt; predicateTemp;
            var localValue = value;

            switch (replacer.Replace(key, string.Empty))
            {
                case "nature":
                    predicateTemp = c =&gt; c.Typologies.NatureDemande == localValue;
                    break;
                case "departementCode":
                    predicateTemp = c =&gt; c.Geographies.DepartementCode == localValue;
                    break;
                case "start":
                    predicateTemp = c =&gt; c.Temps.Date &gt;= DateTime.ParseExact(localValue, Format, null);
                    break;
                case "end":
                    predicateTemp = c =&gt; c.Temps.Date &lt;= DateTime.ParseExact(localValue, Format, null);
                    break;
                default:
                    predicateTemp = c =&gt; true;
                    break;
            }

            predicate = this.OrElse(predicate, predicateTemp);
        }

        queryBase = queryBase.Where(predicate);
    }

    // query all leads
    return queryBase.Select(x =&gt; new Lead
    {
        id = Convert.ToInt32(x.Leads.DemandeWeb_FK),
        lng = Convert.ToDouble(x.Leads.longitudeClient.Replace(",", ".")),
        lat = Convert.ToDouble(x.Leads.latitudeClient.Replace(",", ".")),
        temps = Convert.ToInt32(x.Leads.GeolocDureeTrajetDistrib),
        distance = Convert.ToInt32(x.Leads.GeolocDistanceRouteDistrib),
        nature = x.Typologies.NatureDemande,
        type = x.Distributeurs.DistribType,
        reseau = x.Distributeurs.ReseauDistributeur,
        instance = x.Demands.IdInstance,
        distribution = Convert.ToInt32(x.Distributeurs.DistribIdPointDeVente),
    }).ToList();
}