2010-12-02 55 views
3

我有一个包含许多bool类型属性的类。根据属性值创建动态Linq查询

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; 

在此先感谢

回答

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; 
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()或同等功能),你可以在代码基础上零碎构建它动态条件。