我有实体:Documents,Category,DocList
Documents and DocumentList可以选择多个类别。
我想对一个或多个类别的文档进行过滤。
// all documents
var items = AsDynamic(App.Query["DocList"]["AllDocs"]);
// categories for filter
var fcat = Content.Category;
//linq query??
items = items.Where(d=>d.Category ....????....);
我可以和如何制作这种过滤器吗?
Content.Category是类别列表。
所以我想显示任何类别中的项目列表,而不仅仅是一个
答案 0 :(得分:1)
因此,wiki https://github.com/2sic/2sxc/wiki/DotNet-Query-Linq
中解释了部分内容但我必须承认,对于你的问题,没有任何例子。我相信你想要的东西:
// filter - keep only those that have this Category
// note that the compare must run on the EntityId because of object wrapping/unwrapping
items = items.Where(i =>
(i.Category as List<dynamic>).Any(c => c.EntityId == fcat.EntityId))
所以这应该有效:)
如果fcat是一个列表的附加解决方案应该是约。像这样
// filter - keep only those that have this Category
// note that the compare must run on the EntityId because of object wrapping/unwrapping
items = items.Where(i =>
(i.Category as List<dynamic>).Any(c => fcat.Any(f => c.EntityId == f.EntityId)))
如果这导致错误,您可能需要将fcat转换为类似
的内容((List<dynamic>)fcat).Any(...)
答案 1 :(得分:1)
测试:dnn 9.1.1 / 2sxc 9.14.0
我的最终代码:
@using System
@using ToSic.SexyContent
@using System.Collections.Generic
@using System.Linq
@{
var items = AsDynamic(App.Data["Document"]);
var tags = Content.Tags;
items = items.Where(i => (i.Tags as List<DynamicEntity>).Any(c => ((List<DynamicEntity>)tags).Any(f => c.EntityId == f.EntityId)));
}
<div class="sc-element">
<h1>@Content.Title</h1>
@Edit.Toolbar(Content)
</div>
@foreach(var t in items)
{
<div>@t.Title</div>
}
文档有字段:标题(字符串)和标记(标记实体/多个)
内容是&#34;文档列表&#34;与字段&#34;标签&#34; (标签/多个类型)
这样我的代码就可以了。