1

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

每个文本框代表一个特定字段:作者、标题、出版商和价格。我的设想是用户将在一个或多个字段中输入文本并点击搜索按钮。然后,该程序将返回可以找到与用户标准匹配的任何结果。

如果我使用 SQL 语句,我只需选择与任何输入字段匹配的每条记录(即 SELECT author、title、publisher、price 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;
}

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

4

2 回答 2

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 搜索而不是||

于 2013-04-08T15:47:04.387 回答
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;
}
于 2013-04-08T15:56:00.787 回答