【发布时间】:2010-11-17 18:22:27
【问题描述】:
我有一个包含“标签”列表的文档类。比如:
class Item {
string Name { get; set; }
List<string> Tags {get; set;}
}
现在我想为 RavenDB 创建一个查询,它将所有按标签列表过滤的项目交给我。使用实体框架时,我设法通过以下方式做到这一点:
var query = GetQueryable();
foreach (var tag in tags)
{
query = query.Where(i => i.Tags.Contains(tag));
}
但是,这似乎不适用于 RavenDB,很可能是因为不支持 Contains。我也尝试使用 Any (Where(i => i.Tags.Any(t=>t == tag))) 重写它,但这给了我一个奇怪的例外:
Unable to cast object of type
'System.Linq.Expressions.PrimitiveParameterExpression`1[System.String]'
to type 'System.Linq.Expressions.MemberExpression
有什么好主意吗?我这样做完全错了吗?
【问题讨论】:
-
GetQueryable()返回类型是什么?你在query = query.Where(i => i.Tags.Contains(tag));做什么?查询类型是什么? -
GetQueryable() 返回一个 IQueryable
- 。不过,我确实可以访问整个 DocumentSession,所以这只是一个示例。