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

Linq list of string match any inside string

好的,给定数组:

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

这 return 是错误 "The data types text and text are incompatible in the equal to operator":

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

虽然有几行应该满足条件,但这并没有给出错误,但是 returns 0 结果,我不明白为什么我需要发送 table到列表(至少以前从来不需要这样做):

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

怎么了?我只想 return 中的任何行 --> 数组中的任何 <-- 单词都在 "BodyCopy" 字段中找到。

你的线路

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