我正在尝试编写一个SQL查询,通过输入的字段过滤gridview。有四个字段,标题,名字,姓氏和Company.Name。LINQ SQL查询检查对象字段是否为空
前三个很好,因为它们从不为空,但第四个可以为null。下面的LINQ查询工作得很好:
var listofclients = from client in allcients
where client.Title.ToLower().Contains(titletxtbox.Text.Trim().ToLower())
where client.Firstname.ToLower().Contains(firstnametxtbox.Text.Trim().ToLower())
where client.Surname.ToLower().Contains(surnametxtbox.Text.Trim().ToLower())
orderby client.Name
但是,当我试图把一个过滤器进入它的公司,我会在运行时出现错误时,该公司为空
var listofclients = from client in allcients
where client.Title.ToLower().Contains(titletxtbox.Text.Trim().ToLower())
where client.Firstname.ToLower().Contains(firstnametxtbox.Text.Trim().ToLower())
where client.Surname.ToLower().Contains(surnametxtbox.Text.Trim().ToLower())
where client.Company.Name.ToLower().Contains(companynametxtbox.Text.Trim().ToLower())
orderby client.Name
我会想知道,有没有一种方法来构建查询,以便它只会在client.Company字段不为空时进行过滤。
我也很容易SQL注入或类似的东西,当我直接从这样的文本框领域拉。我知道在这种情况下,它没有连接到数据库,但如果它可以做一个下降。或者,即使它没有连接到数据库,他们可以摆弄列表中的对象吗?
感谢
乔恩·霍金斯
虽然会对检索到的数据集进行过滤。我想像Jon希望将公司名称作为SQL选择的一部分。 – sipwiz 2009-04-13 11:44:53
@sipwiz:否。只要没有ToList()或在“from ... select”上调用等价物,对象listofclient就是IQueryable(因此此时不检索数据)。这意味着请求仍未执行,因此在检索数据之前将执行“where”子句。 – 2010-03-12 09:48:18