使用linq进行高级搜索到sql

时间:2012-05-03 14:16:01

标签: asp.net-mvc linq linq-to-sql ado.net

我正在开发我的第一个ASP.net MVC应用程序,在这个应用程序中我得到了简单和高级搜索类型:

  

简单搜索olny dd,df和gov是必需的   
高级搜索用户有更多选择,即使在高级搜索中,dd,df和gov也是必填字段。

所以这是我的搜索行动

[HttpPost]
    public ActionResult search(LogModel.Search soption)
    {
        // this part will not change the same in simple and advenced
        DateTime dd1 = soption.dd;
        DateTime df1 = soption.df;
        var model = (from p in entity.vehicule                        
                     where p.agence.idgov == soption.gov
                     where !p.indisponible.Any(b => (dd1 >= b.Dd && dd1 <= b.Df) || (df1 >= b.Dd && df1 <= b.Df))
                     where !p.indisponible.Any(c => (c.Dd >= dd1 && c.Dd <= df1) || (c.Df >= dd1 && c.Df <= df1))
                     select p).ToList();


        // here i want to add my filtring action advanced search
        if (!soption.mark)
            model = model.Any(b => b.idmarque == soption.mark );


        return View(model);

    }

简单的搜索模式工作得很好,但现在我正在尝试实现高级搜索,这就是我的想法:

  

如果 model.myVar不为null(表示用户已经下了点东西)   
然后我将根据我的pricinple模型搜索请求过滤一些结果。

所以,如果我做对了,我会发声吗?此行也用红色加下划线:

model = model.Any(b => b.idmarque == soption.mark );

无法将类型bool转换为Systeme.collection.generic.list

2 个答案:

答案 0 :(得分:1)

再次使用where子句

if (!soption.mark) 
            model = from x in model
                    where (b => b.idmarque == soption.mark )
                    select x

答案 1 :(得分:0)

模型的Any()方法返回bool。你可以尝试select()