为什么不通过使用通用方法接口继承来工作查询顺序

时间:2018-11-29 16:28:37

标签: .net linq

如果使用接口实现继承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);
                        }
                  }

2 个答案:

答案 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);
    }
}