【发布时间】:2015-09-09 17:52:28
【问题描述】:
我正在使用 EF 6 和 .net 4.5。 我有一个带有 PK“DocumentId”(Int)和另一列“Title”的“Documents”表。我有另一个名为“DocumentFilters”的表,其中包含“DocumentId”(Int)和“DocGUID”(Guid)列。两个表之间的“Doc Id”上有一个 FK。 Documents 和 DocumentFilters 表之间是一对多 Id 的关系。模型如下所示:
我正在尝试使用 NuGet 包中的 DynamicLibrary.cs 库编写动态 LINQ 查询。
使用常规 Linq,查询在 c# 中看起来像这样:
DocDBContext db = new DocDBContext();
var documents = db.Documents.Include(d => d.DocumentFilters);
Guid gTest = Guid.Parse("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx");
documents = documents.Where(d => d.DocumentFilters.Select(f => f.DocGUID).Contains(gTest));
这完美地工作并检索由我感兴趣的 GUID 过滤器分隔的文档。但是,我需要将它动态地放置在过滤器字符串中,它可能包含其他过滤器。有可能这样做吗?我试过这样的代码:
documents = documents.Where("DocumentFilters.Select(DocGUID).Contains(@0)", gTest);
错误:不存在适用的聚合方法“Select”
或
documents = documents.Where("DocumentFilters.DocGUID=@0", gTest);
错误:DocumentFilters 上不存在 GUID 属性。 (这是有道理的,因为 DocumentFilters 是一个集合)。
我还认为值得一试:
documents = documents.Where("DocumentFilters.AsQueryable().Select(DocGUID).Contains(@0)", gTest);
但同样,该库似乎不支持 AsQueryable 并抛出 错误:不存在适用的聚合方法“AsQueryable”。
是否可以在 Documents 表中对可枚举对象的属性编写这样的限制?
【问题讨论】:
标签: c# entity-framework-6 ienumerable one-to-many dynamic-linq