Implémentation des instructions conditionnelles 'if' dans une requête LINK où 'where'

J'essaie de trouver un moyen de l'interrogation d'un objet dans mon modèle de données et d'y inclure uniquement les paramètres qui ne sont pas null. Comme ci-dessous:

public List<Widget> GetWidgets(string cond1, string cond2, string cond3)
{
    MyDataContext db = new MyDataContext();
    List<Widget> widgets = (from w in db.Widgets
                            where 
                                ... if cond1 != null w.condition1 == cond1 ...
                                ... if cond2 != null w.condition2 == cond2 ...
                                ... if cond3 != null w.condition3 == cond3 ...
                            select w).ToList();
    return widgets;
}

Depuis les widgets de tableau peuvent devenir très grandes, j'aimerais éviter de le faire:

public List<Widget> GetWidgets(string cond1, string cond2, string cond3)
{
    MyDataContext db = new MyDataContext();
    List<Widget> widgets = db.Widgets.ToList();

    if(cond1 != null)
        widgets = widgets.Where(w => w.condition1 == cond1).ToList();

    if(cond2 != null)
        widgets = widgets.Where(w => w.condition2 == cond2).ToList();

    if(cond3 != null)
        widgets = widgets.Where(w => w.condition3 == cond3).ToList();

    return widgets;
}

J'ai regardé plusieurs exemple, mais ne pas vraiment voir tout ce qui correspond à ce que je dois faire.

source d'informationauteur Andy Evans