Linq to sql / C# - 搜索关键/值对的多个位置

时间:2010-10-30 12:39:21

标签: c# linq-to-sql

我是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')

3 个答案:

答案 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