2010-05-27 158 views
1

我有一个ArrayList中的关键字列表,我希望能够建立一个查询来查找基于这个关键字的表中的记录。LINQ基于列表的多个LIKE

由于关键字列表是动态的,因此我无法在此处创建固定查询。

我做这样的事情:

foreach (string kw in keywords) 
{ 
    query = query.Where(p => p.Name.StartsWith(kw)); 
} 

的“StartsWith”这里需要因为我需要寻找那些真正与所提供的关键字开始记录。

在T-SQL它会是这样的

Select * from Table where 
Name like 'keyword1%' 
or Name like 'keyword2%' 
or Name like 'keyword3%' 
or ... 

但我需要能够做到这一点的LINQ?这可能吗?

回答

3

这oughtta做到这一点:

var query = table.Where(p => keywords.Any(kw => p.Name.StartsWith(kw))); 
+0

我不知道LINQ to SQL是否真的很聪明。我知道EF3.5会因为这样的查询而失败。还是我的+1。 – Steven 2010-05-27 13:39:28

+0

使用这个我得到的“”本地序列不能用于除了Contains()运算符之外的查询运算符的LINQ to SQL实现。“exception ... – Bathan 2010-05-31 12:18:52

+0

@Bathan:Huh;我猜@史蒂文的权利呢 - L2S不是不幸的是,我真的不明白用'Contains'来重写它的简单方法... – tzaman 2010-05-31 13:09:11

0
var query = table.Where(p => keywords.Any(kw => p.Name.StartsWith(keyword1) || p.Name.StartsWith(keyword2) || p.Name.StartsWith(keyword3) || p.Name.StartsWith(keyword4))); 

希望它可以帮助您有个愉快的一天。