我是Linq to Sql的新手,我正在尝试在C#中执行以下操作。
我有一个表是键/值存储(对用户也有fk)。我想搜索关键名称和值作为或。在前端,我允许他们添加键名称的“过滤器”,然后他们可以搜索一个值。所以他们可以搜索N个项目,其中N是过滤器的数量。
在普通的sql中,N = 3,它看起来如下所示。 datakey和datavalue是表中的列(varchar(255))。
SELECT * from table
where (datakey='option1' and datavalue='value1')
or (datakey='option2' and datavalue='value2')
or (datakey='option3' and datavalue='value3')
答案 0 :(得分:1)
Theres是一项名为DynamicQuery的技术,它允许您通过字符串构建LINQ表达式,您可能会觉得有用
答案 1 :(得分:1)
是的,正如jasper所说,您可以使用 Dynamic LINQ Query Library 来完成您想要的工作。
这是一个快速而肮脏的例子(注意:我没有测试过这个完全 代码):
List<string> options = new List<string>();
List<string> values = new List<string>();
options.Add("option1");
values.Add("value1");
options.Add("option2");
values.Add("value2");
StringBuilder queryString = new StringBuilder();
for (int i = 0; i < options.Count; i++)
{
if (queryString.Length > 0)
queryString.Append(" Or ");
queryString.Append(string.Format("(datakey = \"{0}\" And dataValue = \"{1}\")", options[i], values[i]));
}
var query = context.YourTable.Where(queryString.ToString());
答案 2 :(得分:0)
使用C#的等效运算符&&
和||
:
from t in context.table
where (t.datakey == "option1" && datavalue == "value1")
|| (t.datakey == "option2" && datavalue == "value2")
|| (t.datakey == "option3" && datavalue == "value3")
select t