Linq列表中的字符串匹配任何内部字符串

时间:2015-01-30 17:17:35

标签: linq

好的,给定数组:

string[] keywordlist = new string[] { "match", "found" };

这将返回错误"数据类型文本和文本在等于运算符"中不兼容:

 List<StaticPage> matches = cdc.StaticPages.Where(x=>keywordlist.Contains(x.BodyCopy)).ToList();

虽然有几行应该满足条件,但这并没有给出错误但返回0结果,我不知道为什么我需要将表发送到列表中(至少从来没有需要在此之前完成):

List<StaticPage> matches = cdc.StaticPages.ToList().Where(x=>keywordlist.Contains(x.BodyCopy)).ToList();

所以什么错了?我只想在女巫中返回任何行 - &gt;数组中的任何&lt; - 单词都可以在&#34; BodyCopy&#34;中找到。字段。

1 个答案:

答案 0 :(得分:1)

你的行

List<StaticPage> matches = cdc.StaticPages.Where(x=>keywordlist.Contains(x.BodyCopy)).ToList();

表示您正在查找BodyCopy等于其中一个关键字的网页。而不是那样,你需要以下一行:

var matches = cdc.StaticPages.Where(
    x => keywordlist.Any(keyword => x.BodyCopy.Contains(keyword))
).ToList();

这意味着您正在查看此类网页,其内容中包含一个关键字。

一个完整的代码段:

class StaticPage
{
    public string BodyCopy;
}
static void Main()
{
    string[] keywordlist = { "match", "found" };
    var cdc = new
    {
        StaticPages = new List<StaticPage>
            {
                new StaticPage {BodyCopy = "text match text"},
                new StaticPage {BodyCopy = "text text"},
                new StaticPage {BodyCopy = "text found text"}
            }
    };
    var matches = cdc.StaticPages.Where(
        x => keywordlist.Any(keyword => x.BodyCopy.Contains(keyword))
    ).ToList();
    foreach (var staticPage in matches)
        Console.WriteLine(staticPage.BodyCopy);
}

输出:

text match text
text found text