使用LINQ和多个“关键字”返回结果?

时间:2013-04-08 15:41:24

标签: c# asp.net

我是ASP.Net和LINQ的新手。我有一个小项目,我正在努力。它基本上由一个带有四个文本框的屏幕,一个listview控件和一个带有一个数据库表的搜索按钮组成。

每个文本框代表某个字段:作者,标题,发布者和价格。我设想的是用户可以在一个或多个字段中输入文本并点击搜索按钮。然后程序将返回符合用户标准的任何结果。

如果我使用的是SQL语句,我只需选择与任何输入字段匹配的每条记录(即SELECT作者,标题,出版商,价格FROM books WHERE ...)。但是,我不太确定如何使用LINQ执行此操作。

那么,有没有人有我的起点?我已经看过LINQ示例,其中一个字段作为搜索限制器:

public void SimpleSearch()
{
    DataClasses1DataContext dc = new DataClasses1DataContext();

    var q =
        from a in dc.GetTable<Books>()
        where a.Title == "1984"
        select a;

    dataGridView1.DataSource = q;
}

但我似乎无法找到在搜索中使用多个限制器的任何其他示例。我开始认为这是不可能的。如果是这样,有人可以推荐一种不同的方式让我完成我想要做的事情吗?基本上,我只想在表格中搜索与用户输入相匹配的字段,并在列表视图中返回结果。任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:2)

您应该可以使用||作为OR分隔符:

public void SimpleSearch()
{
    DataClasses1DataContext dc = new DataClasses1DataContext();

    var q =
        from a in dc.GetTable<Books>()
        where a.Title == "1984" || a.Author == "Stephen King" || a.Price == 5.99m
        select a;

    dataGridView1.DataSource = q;
}

您还可以使用&&进行AND搜索,而不是||

答案 1 :(得分:1)

我喜欢使用contains来使搜索更加模糊,而且我喜欢将所有内容设置为小写,因此在执行搜索时不会出现区分大小写问题。

public void SimpleSearch()
{
  DataClasses1DataContext dc = new DataClasses1DataContext();

  var search = txtSearch.Text.ToLower();

var q =
    from a in dc.GetTable<Books>()
    where a.Title.ToLower() == search ||
    a.Author.ToLower() == search ||
    a.Author.ToLower().Contains(search) ||
    a.Title.ToLower().Contains(search)
    select a;

dataGridView1.DataSource = q;
}