EntityFramework的服务器端评估和客户端评估

1、对普通集合和DbSet调用的Where方法,虽然用起来一样,但是“转到定义”后看到的是不同的方法。
2、普通集合的版本(IEnumerable)是在内存中过滤(客户端评估),而IQueryable版本则是把查询操作翻译成SQL语句(服务器端评估)。

1、IQueryable books = ctx.Books;
books.Where(b => b.Price > 1.1)
2、IEnumerable books = ctx.Books;
books.Where(b => b.Price > 1.1)

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Query;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EF6Demon
{
    public class ModelsResponsitory : IProvider
    {
        private MyDbContext db = new MyDbContext();

        public MyDbContext Db
        {
            get { return db; }
            set { db = value; }
        }

        public void AddActualData(List<ActualData> actualData)
        {
            db.ActualDatas.AddRangeAsync(actualData);
            db.SaveChangesAsync();
        }

        public List<ActualData> GetActualData()
        {

            //IQueryable<ActualData> actualData = db.ActualDatas.Where(a=>a.Id>10);
            //return actualData;
            IEnumerable<ActualData> actualData1 = db.ActualDatas;
            //IEnumerable<TSource> IOrderedEnumerable<TSource> OrderByDescending 全部取出,在内存中比较Where(a => a.Id > 10)
            actualData1.Where(a => a.Id > 10).OrderByDescending(i => i.Id).Take(20);


            //IQueryable<TSource> Where IOrderedQueryable<TSource> OrderByDescending, 给服务器发sql语句 Where(a => a.Id > 10)
            //加上toList 把数据全部取回本地, 不占用带宽
            IQueryable<ActualData> actualData =db.ActualDatas;
            return actualData.Where(a => a.Id > 10).OrderByDescending(i => i.Id).Take(20).ToList(); 
        }
        

        public IIncludableQueryable<NodeClass, IEnumerable<Variable>> GetAllVariable()
        {
              return db.NodeClasses.
              Include(n => n.ModbusNodes.Where(nodes => nodes.NodeClassId == 1))
              .ThenInclude(m => m.ModbusGroups.Where(groups => groups.ModbusNodeId == 1))
              .ThenInclude(gp => gp.Variables.Where(v => v.ModbusGroupId == 1));
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘诺西亚的火山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值