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

C# 在LINQ中构建自定义|渐进式查询?,c#,asp.net,linq,C#,Asp.net,Linq,我有一个包含五个文本框的页面,每个文本框代表我的数据库表中的一个字段和一个搜索按钮: 如果我使用SQL,我可以根据字段中包含数据的字段来构建SQL语句 然而,我想使用LINQ,我不知道如何实现这一点。例如,查看下面的查询: var db = new BookDBDataContext(); var q = from a in db.Books where a.Title.Contains(txtBookTitle

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

如果我使用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,我似乎无法动态更改搜索条件


任何建议都将不胜感激

当然可以!!!如果(!String.IsNullOrEmpty(txtAuthor))q=q.Where(x=>x.Author.Contains(txtAuthor));等等…在发送到查询之前是否验证文本输入?当然可以!!!如果(!String.IsNullOrEmpty(txtAuthor))q=q.Where(x=>x.Author.Contains(txtAuthor));诸如此类……在将文本输入发送到查询之前是否验证文本输入?where子句条件可能需要相反的方式,否则,String。iNulLuleSeleSype将永远不会被击中。@ GordOno261你是对的,我不认为空字符串将包含在任何NULLULL中,WHERE子句条件可能需要反过来。否则,String。iNulLuleSealStices将永远不会被击中。@ GordOno261你是对的,我没有认为空字符串会包含在任何非空中。
 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);
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;