如何使用WPF和Linq-to-entities模型搜索数据库

我准备了一个WPF项目,我希望在那里实现更复杂的搜索。 我通过ADO.NET Entity模型使用LINQ to实体,并计划在WPFToolkit DataGrid中进行显示。

我的搜索窗口应该允许通过几个不同的标准进行搜索。 我的想法是能够在应用程序中写入(例如)名称,姓氏和职业文本框,并接收所选表格中与所有3个搜索参数相对应的所有人员的列表。 我希望能够在输入所有内容时进行搜索,或者即使只输入了一个。

我想另一个选择是将表单绑定到数据库…仍然,我不知道如何搜索这样(我知道如何显示信息,编辑它并插入…但不搜索)。

我虽然应用字符串查询机制,但徒劳无功。 似乎它不起作用。 请分享一些关于如何做到这一点的想法。 任何源或代码片段将不胜感激。

谢谢!

Linq使编写查询变得非常容易,因此您可以从更简单的构建块构建它们。 对于像这样的系统,您还可以使用各种级别。 您可以拥有一个系统,其中查询的一般forms是静态的,这是您的标准Linq查询,但您可以一直使用自定义查询描述格式,然后将其转换为Linq语句。

在您的情况下,您看起来只有几个可能的filter。 你可以这样做:

var Query = Context.MyDataSet; //Whatever is the standard base query if (!string.IsNullOrEmpty(NameFilter)) Query = Query.Where(e => e.Name.Contains(NameFilter)); if (!string.IsNullOrEmpty(SurnameFilter)) Query = Query.Where(e => e.Surname.Contains(SurnameFilter)); ... var Result = Query.ToList(); 

只要您拥有一组固定的用户可以搜索的参数,您就可以通过选择性地添加filter来构建查询。

好的,这是我得到的最终解决方案,它的工作原理。

 var sQuery = from x in dataContext.Patients select x; if (!string.IsNullOrEmpty(serName.Text)) sQuery = sQuery.Where(x => x.Name.Contains(serName.Text)); if (!string.IsNullOrEmpty(serSurame.Text)) sQuery = sQuery.Where(x => x.Surname.Contains(serSurame.Text)); 

非常感谢你的帮助!

您可以在数据库中创建一个搜索表,该表将由正常实体对象上的触发器填充。 搜索表可以是:EntityTableName,EntityTableID,EntityDescriptionString。 实体描述字符串将是您通过组合相关的可搜索字段插入实体时生成的。 然后,您将在SQL中使用标准LIKE查询,或在Linq2SQL中使用.Contains。

搜索很难!

您可以在SQL中编写存储过程来为您执行此操作,然后将其添加到LINQ实体。

存储过程将接受您的3个参数,然后执行查询。

要处理值可能为空字符串(用户未键入任何内容)的情况,您可以添加一个或子句来过滤它。

 SELECT Name, Surname, Occupation FROM tblWhatever WHERE (@Name = '' OR @Name = Name) AND (@Surname = '' OR @Surname = Surname) AND (@Occupation = '' OR @Occupation = Occupation) 

我有一段时间没有编写SQL,因此可能无法立即运行。 希望你能得到这个想法。