基于属性值创建动态Linq查询

时间:2010-12-02 18:58:44

标签: c# linq

我有一个包含许多bool类型属性的类。

public class FilterModel 
{
    public bool Hotel { get; set; }
    public bool Apartment { get; set; }
    public bool Guesthouse { get; set; }

}

我正在根据这些属性是true还是false动态构建LINQ查询。 例如,如果我有这个类的实例并且Hotel设置为true。 我想生成类似

的LINQ查询
var q = from accom in db.Accommodation
                     where accom.Hotel == true 
                     select accom;

提前致谢

2 个答案:

答案 0 :(得分:3)

你在找这样的东西吗?

IQueryable<Accommodation> query = db.Accommodation;

if (filterModel.Hotel)      query = query.Where(a => a.Hotel);
if (filterModel.Apartment)  query = query.Where(a => a.Apartment);
if (filterModel.Guesthouse) query = query.Where(a => a.Guesthouse);

return query;

答案 1 :(得分:2)

你想要这样的东西:

var filterModel = GetFilterModelFromSomewhere();
var q = db.Accomodation;

if (filterModel.Hotel)
    q = q.Where(accom => accom.Hotel);

if (filterModel.Apartment)
    q = q.Where(accom => accom.Apartment);

if (filterModel.Guesthouse)
    q = q.Where(accom => accom.Guesthouse);

由于查询在您枚举之前不会执行(通过ToList()或等效函数),您可以根据动态条件在​​代码中逐个构建它。