c# - 角度剑道网格自定义过滤器不适用于具有集合属性的对象
问题描述
我想对作为对象集合的列进行过滤。
我使用 kendo-grid 来显示 Product 对象:
public class Product
{
public string Id{ get; set; }
public string Title{ get; set; }
public ObservableCollection<Tag> Tags { get; set; }
}
public class Tag
{
public string Id{ get; set; }
public string Title{ get; set; }
}
我想按标签过滤网格,所以我在打字稿中为剑道网格编写了自定义过滤器
private tagFilter: any[] = [];
public tagChange(values: any[], filterService: FilterService): void {
filterService.filter({
filters: values.map(value => ({
field: "tags.id",
operator: "eq",
value
})),
logic: "or"
});}
public tagFilters(filter: CompositeFilterDescriptor): FilterDescriptor[] {
this.tagFilter.splice(
0, this.tagFilter.length,
...flatten(filter).map(({ value }) => value)
);
return this.tagFilter; }
const flatten = filter => { const filters = (filter || {}).filters; if (filters) {
return filters.reduce((acc, curr) => acc.concat(curr.filters ? flatten(curr) : [curr]), []); } return [];};
和 HTML 代码是
<kendo-grid-column field="tags.id" title="Tag" width="150">
<ng-template kendoGridFilterMenuTemplate let-column="column" let-filter="filter" let-filterService="filterService">
<kendo-multiselect style="width:220px"
[data]="allTags"
textField="title"
valueField="id"
[valuePrimitive]="true"
[value]="tagFilters(filter)"
(valueChange)="tagChange($event, filterService)">
</kendo-multiselect>
</ng-template>
后端代码是 C# 并且搜索服务是
public virtual DataSourceResult SearchKendo(DataSourceRequest criteria)
{
using (var repository = _repositoryFactory())
{
return repository.Products.Include("Tags").ToDataSourceResult(criteria.Take, criteria.Skip, criteria.Sort, criteria.Filter);
}
}
但在运行时我得到这个错误
System.Linq.Dynamic.Core.Exceptions.ParseException: 'No property or field 'id' exists in type 'ObservableCollection`1''
似乎“标签”不被称为对象的集合,实际上它被认为是一个对象
解决方案
推荐阅读
- react-native - 登录后无法转到下一页-反应本机堆栈导航
- laravel - 如果用户在 Laravel 中经过身份验证,如何签入 Vue 组件?
- delphi - Delphi 有类似javascript“模板文字”的东西吗?
- rxjs6 - 是否有用于处理 WebWorker 通知的 RxJS6 调度程序?
- r - 具有 GA 包适应度函数的 R 中的错误
- css - 通过定义新的 CSS 规则来改变有序列表的外观
- java - 多项选择测验不承认答案
- c++ - 如何使用 libcurl 形成这些 GET 请求?
- javascript - Axios 不断向错误的端点发送 GET
- sql-server - SQL Server:同步来自不同数据库的表