【发布时间】:2017-09-12 08:07:47
【问题描述】:
我正在使用 ArangoDB,我正在查询一个名为 movies 的集合。它的数据结构使得categories 是一个字符串列表。
public class movies
{
[DocumentProperty(Identifier = IdentifierType.Key)]
public string Key;
public List<string> categories;
public string desc;
public string img;
public List<vod_stream> streams;
public string title;
};
查询语句如下:
var result = db.Query<movies>()
.Where(p => p.categories.Contains(id));
id 作为参数传递,我需要检索所有类别与 id 匹配的电影。
但是,上面的代码不起作用,因为result 为我提供了集合中的所有电影。
foreach (movies mov in result)
{
if (mov.categories.Contains(id) == false)
{ continue; }
// do something here
}
奇怪的是,当我遍历结果中的项目时,相同的函数确实为某些项目返回 false。但它在 Linq 语句中不起作用。
有人知道我的查询语句有什么问题吗?
【问题讨论】:
-
我不明白为什么第二个代码有效,而前一个无效。你确定你提供了确切的代码吗?也许你忘记了一些
!-operator。无论如何,您可以将第二个条件缩短为if(!mov.categories.Contains(id))。 -
包含调用列表中对象的 Equals 方法。如果您的类
movies没有正确覆盖 Equals,它将默认返回 false,除非它的对象相同(即内部引用编号相同)。 -
@Chrisi - categories 是一个字符串列表,所以我认为不是这样
-
我已经更新了我的问题,以便更清楚
-
这两个 sn-ps 几乎没有共同点。第一个是 database 查询,第二个甚至不是查询,它只是一个列表的迭代。 你想做什么?查找属于特定类别的所有电影?第一个sn-p生成的查询是什么?