在LINQ中构建自定义|渐进式查询?

时间:2013-04-11 15:46:10

标签: c# asp.net linq

我有一个包含五个文本框的页面,每个文本框代表我的数据库表中的一个字段和一个搜索按钮: enter image description here

如果我使用SQL,我可以根据哪些字段包含数据来构建我的SQL语句。

但是,我想使用LINQ,我对如何实现这一点感到茫然。例如,看看下面的查询:

        var db = new BookDBDataContext();

        var q =
            from a in db.Books
            where a.Title.Contains(txtBookTitle) &&
                  a.Author.Contains(txtAuthor) &&
                  a.Publisher.Contains(txtPublisher)
            select a.ID;

上面的查询将返回所有字段与表中的数据匹配的数据。但是,如果用户没有在txtAuthor字段中输入作者怎么办?如果我将其构建为查询字符串,我可以检查每个字段的数据并将其添加到查询字符串中。由于这是LINQ,我似乎无法动态更改搜索条件。

任何建议都会非常感激!

2 个答案:

答案 0 :(得分:4)

 var db = new BookDBDataContext();

 var q = (from a in db.Books
          where a.Title.Contains(txtBookTitle));

 if(!String.IsNullOrEmpty(txtAuthor)) 
 {
      q = q.Where(a => a.Author.Contains(txtAuthor));
 }


 if(!String.IsNullOrEmpty(txtAuthor)) 
 {
      q = q.Where(a => a.Publisher.Contains(txtPublisher));
 }

 var id = q.Select(a => a.ID);

答案 1 :(得分:1)

from a in db.Books
  where (string.isNullorWhiteSpace(search) || a.Title.Contains(search)) &&
        (string.isNullorWhiteSpace(txtAuthor) || a.Author.Contains(txtAuthor) ) &&
        (string.isNullorWhiteSpace(txtPublisher) || a.Publisher.Contains(txtPublisher))
select a.ID;