• IEnumerable<T>与IQueryable<T>以及.net的扩展方法


    首先看看继承关系

    public abstract class DbSet : DbQuery

    public abstract class DbQuery : IOrderedQueryable, IQueryable, IEnumerable, IListSource 

    public interface IQueryable<out T> : IEnumerable<T>, IQueryable, IEnumerable

    再看这段代码:

    定义了Members:

    public DbSet<Member> Members { get; set; }

    之后为某变量赋值:

    IEnumerable<Member> listA = Members;

    然后我Where了

    listA.Where(entity=>entity.Name.Equals("aa"));

    但这个Where调用的却是IEnumerable<T>中的Where,虽然我这边用了父接口来定义的变量,但我却是想使用IQueryable<T>中的Where。多态呢?多态去哪了呢?好吧,这只不过是重载。

    来看下IEnumerable<T>与IQueryable<T>对于Where方法的定义:

    IEnumerable<T>:

    public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);

    IQueryable<T>:

    然后它又利用.net的新特性扩展方法:

    public static IQueryable<TSource> Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate);

    而且这些个扩展方法都是static静态的重载。

    最后,我只想说这个扩展方法的新特性只不过是看起来很美而已。

  • 相关阅读:
    SCCM 补丁更新 失误排错一例
    Oracle 远程连接 DB配置 连接命令
    反向代理服务器
    用JMF播放音频 例子
    HTML css兼容
    Java国际化
    JBPM 之介绍,使用
    Nginx内核优化引用
    Nginx 学习
    局域网访问VMware虚拟机中的Ubuntu
  • 原文地址:https://www.cnblogs.com/nickppa/p/3300498.html
Copyright © 2020-2023  润新知