2013-04-25 66 views
2

努力学习LINQ的,但在这里撞到墙上的所有文章。发现包含单词与LINQ

我试图找到所有包含多个字符串的文章,但不知道如何在列表中传递时使用.Contains。

private void SearchArticles() 
{ 
    AdminEntities db = new AdminEntities(); 

    var searchStrs = new List<string> {"search_string1", "search_string2"}; 
    var artListfull = db.view_M02Articles_SearchPublished(0, "").ToList(); 
    var artList = artListfull.FindAll(n => n.Bodytext.Contains(searchStrs)); 

    Label1.Text = artList.Count.ToString(); 
    Repeater1.DataSource = artList; 
    Repeater1.DataBind(); 
} 

这里的正确语法是什么?

+1

当你说“的文章包含多个字符串”,你的意思是所有的琴弦?或者只是一个以上? – AlexFoxGill 2013-04-25 12:09:35

+1

可能的重复[要检查一个字符串是否包含一个列表中的元素(字符串) - 有没有更好的方法来编写此代码?](http://stackoverflow.com/questions/500925/to-check-if -a-string-contains-an-a-list-of-strings-is-there-ab) – NominSim 2013-04-25 12:10:02

+0

我需要所有字符串匹配。 – Darkmage 2013-04-25 12:21:26

回答

5

[编辑]假设BodyText是类型的string

可以尝试这一点:

//the article body must contain "ALL" the search terms 
var artList = artListfull.Where(art => searchStrs.All(art.BodyText.Contains)); 

//the article body must contain "At least one" of the search terms 
var artList = artListfull.Where(art => searchStrs.Any(art.BodyText.Contains)); 

[编辑2]通过art.BodyText.Contains替换str => art.BodyText.Contains(str)

+0

这将工作,虽然它会低效地迭代正文多次 – AlexFoxGill 2013-04-25 12:10:30

+1

请注意,您可以用'art.BodyText.Contains'替换'str => art.BodyText.Contains(str)' – 2013-04-25 12:13:00

+0

@AlexG:我不会认为除了通过“搜索项目”和“正文文本”迭代以外,还有另外一种选择,就像'加入' – polkduran 2013-04-25 12:17:57

1
var artList = artListfull.Where(a => searchStrs.Any(s => a.Bodytext.Contains(s))) 
         .ToList(); 
2

随着LINQ

var artList= (from art in artFullList 
       from search in searchStrs 
       where art.Bodytext.Contains(search) 
       select art).ToList();