栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

记一次使用.net linq for Entity 的坑

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

记一次使用.net linq for Entity 的坑

 在一次耗时日志分析的时候发现一个请求走了10几秒。经过对接口逻辑的分析,终于发现了问题所在。

平时在使用linq查询数据库多条数据的时候,我们一般会用到where+select+toList()的方式。

但下面两种方式,第一种比第二种查询速度快很多倍。

第一种写法:

var newsList = repository.DbContext.Set().Where(m => m.EventId == eventId && m.Type == (sbyte)EPromotiePageType.News).Select(m => new NewsTitleModel { Id = m.Id, Title = m.Title, Type = m.Type, FileUrl = m.FileUrl, NewsCategory = m.NewsCategory, CreateDate = m.CreateDate}).ToList();

 第二种写法:

var newsList = repository.DbContext.Set().Where(m => m.EventId == eventId && m.Type == (sbyte)EPromotiePageType.News).Select(m => new NewsTitleModel(m)).ToList();
public class NewsTitleModel
    {
        public string FileUrl { get; set; }

        public int Id { get; set; }

        public string Title { get; set; }

        public sbyte Type { get; set; }

        public string NewsCategory { get; set; }

        public DateTime CreateDate { get; set; }

        public List AppendixList  { get; set; }

        public NewsTitleModel()
        {

        }

        public NewsTitleModel(WebInfoSetUp model)
        {
            this.Id = model.Id;
            this.FileUrl = model.FileUrl;
            this.Title = model.Title;
            this.Type = model.Type;
            this.NewsCategory = model.NewsCategory;
            this.CreateDate = model.CreateDate;
        }
    }

原因在于,

第一种方式(响应时间几百毫秒)用的select转成sql语句之后是:

select(Id,Title,Type,FileUrl,NewsCategory,CreateDate) from WebInfoSetUp where EventId = {某Id} and Type = 1.

第二种却是:(响应时间几秒钟)

select * from WebInfoSetUp where EventId = {某Id} and Type = 1.

之所以 select * 比 select 几个字段快很多倍,就在于刚好我这张表是新闻表,表结构里有一个正文字段,用于存储新闻资讯的富文本格式。

看来linq for Entity 对于select内使用构造函数是不会进行解析的。看到select内用m进行传参构造还是的时候就直接解析成了 select *

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/906163.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号