Expression<Func<TEntity, bool>>与Func<TEntity, bool>的异同
  public IList<TEntity> Search<TEntity>(Expression<Func<TEntity, bool>> predicate = null) where TEntity : class
{
if (predicate == null)
{
return dbContext.Set<TEntity>().ToList();
}
else
{
return dbContext.Set<TEntity>().Where(predicate).ToList();
} }

本人通过跟踪sql语句得知

predicate如果为委托类型的时候,dbContext.Set<TEntity>().Where(predicate).ToList();对应的sql语句是

SELECT
[Extent1].[UserID] AS [UserID],
[Extent1].[LoginName] AS [LoginName],
[Extent1].[Password] AS [Password],
[Extent1].[UserName] AS [UserName],
[Extent1].[UserType] AS [UserType],
[Extent1].[Tel] AS [Tel],
[Extent1].[CreateDate] AS [CreateDate],
[Extent1].[LoginNum] AS [LoginNum],
[Extent1].[LastDate] AS [LastDate],
[Extent1].[ShopID] AS [ShopID]
FROM [dbo].[S_Users] AS [Extent1]

但是当predicate如果为表达式树的时候,语句如下,

SELECT
[Extent1].[UserID] AS [UserID],
[Extent1].[LoginName] AS [LoginName],
[Extent1].[Password] AS [Password],
[Extent1].[UserName] AS [UserName],
[Extent1].[UserType] AS [UserType],
[Extent1].[Tel] AS [Tel],
[Extent1].[CreateDate] AS [CreateDate],
[Extent1].[LoginNum] AS [LoginNum],
[Extent1].[LastDate] AS [LastDate],
[Extent1].[ShopID] AS [ShopID]
FROM [dbo].[S_Users] AS [Extent1]
WHERE N'liuyangh' = [Extent1].[LoginName]

所以我们尽量用表达式树传参,而不是单纯地lambda表达式或者委托类型。

为什么会这样呢?

因为dbContext.Set<TEntity>().Where(predicate),当是表达式树的时候返回的是IQueryable<TSource>

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

如果是委托类型返回的是IEnumerable<TSource>
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);

Entity Framework 第四篇 优化SQL查询的更多相关文章

  1. Entity Framework 学习初级篇4--Entity SQL

    Entity SQL 是 ADO.NET 实体框架 提供的 SQL 类语言,用于支持 实体数据模型 (EDM).Entity SQL 可用于对象查询和使用 EntityClient 提供程序执行的查询 ...

  2. Lazy<T>在Entity Framework中的性能优化实践

    Lazy<T>在Entity Framework中的性能优化实践(附源码) 2013-10-27 18:12 by JustRun, 328 阅读, 4 评论, 收藏, 编辑 在使用EF的 ...

  3. Entity Framework学习笔记(六)----使用Lambda查询Entity Framework(1)

    请注明转载地址:http://www.cnblogs.com/arhat 在前几章中,老魏一直使用Linq来查询Entity Framework.但是老魏感觉,如果使用Linq的话,那么Linq的返回 ...

  4. Entity Framework 学习中级篇1—EF支持复杂类型的实现

    本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的简单操作. 通常,复杂类型是指那些由几个简单的类型组合而成的类型.比如:一张Customer表,其中有FristName和Las ...

  5. Entity Framework学习初级篇2

    Entity Framework 学习初级篇2--ObjectContext.ObjectQuery.ObjectStateEntry.ObjectStateManager类的介绍 本节,简单的介绍E ...

  6. SQL常见优化Sql查询性能的方法有哪些?

    常见优化Sql查询性能的方法有哪些? 1.查询条件减少使用函数,避免全表扫描 2.减少不必要的表连接 3.有些数据操作的业务逻辑可以放到应用层进行实现 4.可以使用with as 5.使用“临时表”暂 ...

  7. ElasticSearch查询 第四篇:匹配查询(Match)

    <ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...

  8. Entity Framework 学习初级篇5--ObjectQuery查询及方法

    ObjectQuery 类支持对 实体数据模型 (EDM) 执行 LINQ to Entities 和 Entity SQL 查询.ObjectQuery 还实现了一组查询生成器方法,这些方法可用于按 ...

  9. entity framework 新手入门篇(3)-entity framework实现orderby,count,groupby,like,in,分页等

    前面我们已经学习了entityframework的基本的增删改查,今天,我们将在EF中实现一些更加贴近于实际功能的SQL方法. 承接上面的部分,我们有一个叫做House的数据库,其中包含house表和 ...

随机推荐

  1. Android Studio更新升级方法(转)

    自从2013 Google I/O大会之后,笔者就将android ide开发工具从eclipse迁移到Android Studio了,android studio一直在更新完善,为了与时俱进,我们当 ...

  2. 数组有没有length()这个方法? String有没有length()这个方法?

    答:数组和string都没有Length()方法,只有Length属性.

  3. fackbook的Fresco (FaceBook推出的Android图片加载库-Fresco)

    [Android开发经验]FaceBook推出的Android图片加载库-Fresco   欢迎关注ndroid-tech-frontier开源项目,定期翻译国外Android优质的技术.开源库.软件 ...

  4. CSS3 filter:drop-shadow滤镜与box-shadow区别应用 抄的

    CSS3 filter:drop-shadow滤镜与box-shadow区别应用 这篇文章发布于 2016年05月18日,星期三,01:07,归类于 css相关. 阅读 5777 次, 今日 12 次 ...

  5. c# 获取路径的几种方法

    1.取得控制台应用程序的根目录方法 方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径方法2.AppDomain.CurrentDomain.Bas ...

  6. jvm排查工具

    jps jps -mvl --查看java的ps进程. jstack 打印一个线程堆栈信息 top -H -p pid1 -> 得到占用资源大的pid2 jstack pid1 | grep & ...

  7. [div+css]竖排菜单

             }          #box{              width:120px;              font-size: 12px;              font- ...

  8. 【rails3教材】博客构建过程

    构建rails项目--blog $ rails new blog --skip-bundle $ cd blog $ bundle --local $ bundle install #安装需要的包 $ ...

  9. 各种类型的Writable(Text、ByteWritable、NullWritable、ObjectWritable、GenericWritable、ArrayWritable、MapWritable、SortedMapWritable)转

    java原生类型 除char类型以外,所有的原生类型都有对应的Writable类,并且通过get和set方法可以他们的值. IntWritable和LongWritable还有对应的变长VIntWri ...

  10. OpenStack主机列表接口

    如之前讨论,openstack提供一套接口给运维管理平台,运维管理平台通过获取到的IP地址对主机进行监控. 接口名  请求地址  请求方法  请求cookie  请求头  返回值  返回值使用  登录 ...