我的代码中没有出现任何错误,但我的过滤器对象始终为null。当我运行调试器时,过滤器对象看起来就像排序对象,包含其中的东西的列表。虽然您可以看到它实际上是一个界面..我需要在此代码中更改哪些内容才能访问过滤器中的信息?我想我的主要问题是我不完全掌握如何使用接口。
public IList<Kendo.Mvc.IFilterDescriptor> Filters { get; set; }
public IList<Kendo.Mvc.SortDescriptor> Sorts { get; set; }
List<SortDescriptor> sort = request.Sorts as List<SortDescriptor>;
if(sort.Count == 1)
{
pRequest.SortMember = sort[0].Member;
pRequest.SortDirection = (int)sort[0].SortDirection;
}
List<FilterDescriptor> filter = request.Filters as List<FilterDescriptor>;
if (filter != null)
{
pRequest.Startdate = (DateTime)filter[0].ConvertedValue;
}
else
{
var endDate = new TimeSpan(4000, 0, 0, 0, 0);
pRequest.Startdate = DateTime.UtcNow - endDate;
}
答案 0 :(得分:2)
该列表为空,因为您尝试将List<IFilterDescriptor>
转换为List<FilterDescriptor>
,但仅仅因为FilterDescriptor
继承自IFilterDescriptor
并不意味着List<FilterDescriptor>
继承自List<IFilterDescriptor>
(除非列表是协变的List<in T>
,否则它不是)。
你应该这样做:
IList<IFilterDescriptor> filter = request.Filters;
如果接口处于罚款状态,否则您可以像下面这样列出:
List<FilterDescriptor> filter = request.Filters.OfType<FilterDescriptor>.ToList();
答案 1 :(得分:2)
感谢帮助我和我的一个朋友交谈的人,他建议我这样做......所以我想我不应该试图投射列表和接口。
if(request.Sorts.Count == 1)
{
pRequest.SortMember = request.Sorts[0].Member;
pRequest.SortDirection = (int)request.Sorts[0].SortDirection;
}
if (request.Filters.Count >= 1)
{
foreach(var item in request.Filters)
{
if(item is Kendo.Mvc.FilterDescriptor)
{
var descriptor = (Kendo.Mvc.FilterDescriptor)item;
pRequest.Startdate = (DateTime)descriptor.ConvertedValue;
}
}
}
else
{
var endDate = new TimeSpan(4000, 0, 0, 0, 0);
pRequest.Startdate = DateTime.UtcNow - endDate;
}