我有一个基本架构
Post {
Labels: [
{ Text: "Mine" }
{ Text: "Incomplete" }
]
}
我正在查询 raven,询问所有带有“我的”和“不完整”标签的帖子。
queryable.Where(candidate => candidate.Labels.Any(label => label.Text == "Mine"))
.Where(candidate => candidate.Labels.Any(label => label.Text == "Incomplete"));
这会导致 raven 查询(来自 Raven 服务器控制台)
Query: (Labels,Text:Incomplete) AND (Labels,Text:Mine)
Time: 3 ms
Index: Temp/XWrlnFBeq8ENRd2SCCVqUQ==
Results: 0 returned out of 0 total.
为什么是这样?如果我查询包含“不完整”的 JUST,我会得到 1 个结果。如果我查询 JUST 包含“我的”,我得到相同的结果 - 那么为什么我同时查询它们,我得到 0 个结果?
编辑:
好的-所以我走得更远了。“自动生成的索引”看起来像这样
from doc in docs.FeedAnnouncements
from docLabelsItem in ((IEnumerable<dynamic>)doc.Labels).DefaultIfEmpty()
select new { CreationDate = doc.CreationDate, Labels_Text = docLabelsItem.Text }
所以,我认为查询基本上是在测试相同标签的 2 个不同值。坏的。
我把它改成这样:
from doc in docs.FeedAnnouncements
from docLabelsItem1 in ((IEnumerable<dynamic>)doc.Labels).DefaultIfEmpty()
from docLabelsItem2 in ((IEnumerable<dynamic>)doc.Labels).DefaultIfEmpty()
select new { CreationDate = doc.CreationDate, Labels1_Text = docLabelsItem1.Text, Labels2_Text = docLabelsItem2.Text }
现在我的查询(在 Raven Studio 中)Labels1_Text:Mine AND Labels2_Text:Incomplete
有效!
但是,从 Linq 查询时,如何处理这些幻像字段(Labels1_Text 和 Labels2_Text)?