如果使用接口实现继承T类型类,则orderbydescending无效。 但是,如果我确实继承了interface(Isort)的具体类,那就行得通。
My interface:
public interface ISorter
{
IQueryable<T> NewsSort<T>(IQueryable<T> query) where T : ISort;
}
Type class:
public FinalResults : ISort
{
public DateTime NewsDate{ get; set; }
}
Implementation:
public class NewsSorter : ISorter
{
public IQueryable<T> NewsSort<T>(IQueryable<T> query)
where T : ISort
{
query = query.OrderByDescending(p => p.NewsDate);
}
}
答案 0 :(得分:1)
您希望NewsSort
神奇地计算出传递给它的接口实现,然后修改该实现的属性,这是不可能的。
您必须将NewsDate
作为属性添加到接口ISort
,以便在实现之间共享并且可以通过这种方式进行访问!
public interface ISort
{
DateTime NewsDate { get; set; }
}
public interface ISorter
{
IQueryable<T> NewsSort<T>(IQueryable<T> query) where T : ISort;
}
public class FinalResults : ISort
{
public DateTime NewsDate { get; set; }
}
public class NewsSorter : ISorter
{
public IQueryable<T> NewsSort<T>(IQueryable<T> query) where T : ISort
{
return query.OrderByDescending(p => p.NewsDate);
}
}
答案 1 :(得分:0)
您正在尝试覆盖传递给该方法的参数。
调整实现中的代码,如下所示:
public class NewsSorter : ISorter
{
public IQueryable<T> NewsSort<T>(IQueryable<T> query)
where T : ISort
{
return query.OrderByDescending(p => p.NewsDate);
}
}