我试图在文本框中输入关键字时向用户提供数据库表中的项目列表。我目前的问题是用户可以输入几个关键字,我希望能够只对数据库执行一次往返,并获得几个关键字的结果匹配(OR操作)。有没有办法执行这样的任务而不必为每个关键字命中数据库?
答案 0 :(得分:5)
包含()是你的朋友。
List<string> keywords = new List<string>();
keywords.Add("foo");
keywords.Add("bar");
var results = from item in db.Table
where keywords.Contains(item.Description)
select item;
...给你
WHERE [t0].[Description] IN (@p0, @p1)
答案 1 :(得分:1)
我发现post为我想要实现的目标提供了一个很好的解决方案。谢谢你的帮助!
答案 2 :(得分:0)
我发现this page在尝试找出C#中的LINQ
内容时非常有用。它建议the following syntax:
var results = from Item i in myCollectionOfItems
where i.OneThing = aGoodThing || i.SomeStuff != theBadStuff
select i;
编辑:抱歉,误解了这个问题 - 我已更新以匹配OR
操作的请求。 (我在参考页面上找不到||
语法,但我认为它会起作用。compiles on my machine ...
答案 3 :(得分:0)
将您的输出标记为关键字搜索。
然后你可以在where条件中继续说或在c#(||运算符)中。
即
var query = from row in mytable
where (row.column == a) || (row.column == b) || //.... etc
select row
答案 4 :(得分:0)
你可以尝试:
List<string> keywords = new List<string>();
keywords.Add("foo");
keywords.Add("bar");
var results = from item in db.Table
where keywords.Exists(k => item.Description.Contains(k))
select item;
但我不确定它会转换为SQL ......