zoukankan      html  css  js  c++  java
  • 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静态的重载。

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

  • 相关阅读:
    mongodb导入导出
    python笔记1
    C# 文件下载断点续传
    热水维修记事
    memcached笔记
    模拟登陆
    Nginx学习笔记之加强篇
    Redis学习笔记之基础篇
    Nginx学习笔记之应用篇
    Nginx 学习笔记之安装篇
  • 原文地址:https://www.cnblogs.com/nickppa/p/3300498.html
Copyright © 2011-2022 走看看