【发布时间】:2019-08-08 15:56:40
【问题描述】:
我正在编写我认为应该是一个相对简单的 Windows 窗体应用程序。我正在使用 LINQ to SQL,尽管我以前从未使用过它。我们有一个 SQL Server 数据库,我正在创建一个前端来访问该数据库。我正在尝试找出使用它搜索多个(任意数量)搜索参数的最有效方法。
在 Windows 窗体中,我创建了一个字典,其中包含要搜索的每个搜索键及其值,并将其传递给我的 search() 方法。我正在尝试找到一种方法来使用每个键及其关联值来搜索数据库。这是我想要做的:
public IQueryable<Product> Search(Dictionary<string, string> searchParams)
{
DBDataContext dc = new DBDataContext();
var query = dc.Products;
foreach (KeyValuePair<string, string> temp in searchParams)
{
query = query.Where(x => x.(temp.Key) == temp.Value);
}
return query;
}
我意识到在语法上 x.(temp.Key) 是不正确的,但我希望这能说明我正在尝试做的事情。我想知道是否有另一种方法可以去做我想做的事情而不必做一个巨大的 switch 语句(或 if/else if tree)。
编辑
所以,我对其进行了一些修改,但我仍然遇到问题。这是我目前拥有的:
public IQueryable<Product> Search(Dictionary<string, string> searchParams)
{
DBDataContext dc = new DBDataContext();
string sQuery = "";
foreach (KeyValuePair<string, string> temp in searchParams)
{
sQuery += temp.Key + "=" + temp.Value + " AND ";
}
var query = dc.Products.Where(sQuery);
return query;
}
根据 LINQ 动态查询库文章,这应该没问题。这是我得到的错误:
无法从用法中推断方法“System.Linq.Queryable.Where(System.Linq.IQueryable, System.Linq.Expressions.Expression>)”的类型参数。尝试明确指定类型参数。
【问题讨论】:
-
搜索方法参数是否需要是字典而不是 Func
??? -
不完全确定你的意思...你能澄清一下吗?
-
字典中的每个键都包含要搜索的参数(以及要搜索的每个参数值)。
-
根据您的动态查询构建器示例,我在下面的末尾添加了关于“AND”的编辑,希望能为您解决。
标签: c# linq-to-sql