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静态的重载。
最后,我只想说这个扩展方法的新特性只不过是看起来很美而已。
IEnumerable<T>与IQueryable<T>以及.net的扩展方法的更多相关文章
- 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法
比如Json.NET的JObject明明实现了IEnumerable<T>,具体来说是IEnumerable<KeyValuePair<string, JToken>&g ...
- 编写高质量代码改善C#程序的157个建议[IEnumerable<T>和IQueryable<T>、LINQ避免迭代、LINQ替代迭代]
前言 本文已更新至http://www.cnblogs.com/aehyok/p/3624579.html .本文主要学习记录以下内容: 建议29.区别LINQ查询中的IEnumerable<T ...
- 对IEnumerable<T>和IQueryable<T>的一点见解
今天学习了用EF模型做查询,感觉数据库上下文对象的扩展方法很强大,所以研究了一下where的实现原理,其中遇到了一个问题,就是关于IEnumerable和IQueryable的区别,所以查了查资料,这 ...
- IEnumerable<T>和IQueryable<T>
建议29.区别LINQ查询中的IEnumerable<T>和IQueryable<T> LINQ查询方法一共提供了两类扩展方法,在System.Linq命名空间下,有两个静态类 ...
- IEnumerable<T>和IQueryable<T>区分
LINQ查询方法一共提供了两种扩展方法,在System.Linq命名空间下,有两个静态类:Enumerable类,它针对继承了IEnumerable<T>接口的集合进行扩展:Queryab ...
- IEnumerable<T>和IQueryable<T>区别
LINQ查询方法一共提供了两种扩展方法,在System.Linq命名空间下,有两个静态类:Enumerable类,它针对继承了IEnumerable<T>接口的集合进行扩展:Queryab ...
- LINQ查询中的IEnumerable<T>和IQueryable<T>
LINQ查询方法一共提供了两种扩展方法,在System.Linq命名空间下,有两个静态类:Enumerable类,它针对继承了IEnumerable<T>接口的集合进行扩展:Queryab ...
- 编写高质量代码改善C#程序的157个建议——建议29:区别LINQ查询中的IEnumerable<T>和IQueryable<T>
建议29:区别LINQ查询中的IEnumerable<T>和IQueryable<T> LINQ查询一共提供了两类扩展方法,在System.Linq命名空间下,有两个静态类:E ...
- C#对IQueryable<T>、IEnumerable<T>的扩展方法
#region IQueryable<T>的扩展方法 #region 根据第三方条件是否为真是否执行指定条件的查询 /// <summary> /// 根据第三方条件是否为真是 ...
随机推荐
- xpath轴的正确使用姿势
网上看了许多关于轴的介绍,只介绍了语法,而没有明说具体实际中该怎么使用,百思不得其解. 背景--python中使用xpath: ----------------------------------- ...
- test「Python」流程&中文
#例1 text='dShArpen骑草泥马在马勒隔壁玩Python时看到一群SB绿茶婊在逗逼,马上的他马上吓尿了' iftext = '马' for letter in text.decode('u ...
- JavaScript面向对象,及面向对象的特点,和如何构造函数
1.面向对象和面向过程的区别 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了: 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是 ...
- SQLite数据库使用
最近在查看一些关于数据库的相关文档博客写写总结,以防下次自己又忘啦 哈哈 首先,安卓是有给我们提供一个帮助类SQLiteOpenHelper,这个类我们一般需要实现3个方法,哈哈这个编译工具是会提示 ...
- Groovy入门教程
Groovy入门教程 kmyhy@126.com 2009-5-13 一.groovy是什么 简单地说,Groovy 是下一代的java语言,跟java一样,它也运行在 JVM 中. 作为跑在JVM ...
- iOS页面传值-wang
iOS页面间传值的方式(NSUserDefault/Delegate/NSNotification/Block/单例) 实现了以下iOS页面间传值:1.委托delegate方式:2.通知notific ...
- 一个大数据的demo
package test.admin; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fil ...
- JavaScript常用对象的方法和属性
---恢复内容开始--- 本文将简单介绍JavaScript中一些常用对象的属性和方法,以及几个有用的系统函数. 一.串方法 JavaScript有强大的串处理功能,有了这些串方法,才能编写出丰富多彩 ...
- [2]项目创建-使用C#.NET开发基于本地数据缓存的PC客户端
1.新建项目->已安装->模板->Visual c#->Windows桌面->Windows窗体应用程序,截图如下: 图中1:输入项目名称-“MoneyNotes”,图中 ...
- ns115 step by step
一,安装环境: sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev lib ...