好的,给定数组:
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;中找到。字段。
答案 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