c# – Linq之间的表现
发布时间:2020-12-15 23:46:57 所属栏目:百科 来源:网络整理
导读:我正在使用Entity Framework,我想知道以下代码之间是否有任何区别.第一个和第二个代码似乎通过Entidad.Nombre ==“Empresa”获取所有项目,最后一个代码似乎只获得Entidad.Nombre ==“Empresa”的项目.我错了吗?什么是更好的? var listFields = from b in u
我正在使用Entity Framework,我想知道以下代码之间是否有任何区别.第一个和第二个代码似乎通过Entidad.Nombre ==“Empresa”获取所有项目,最后一个代码似乎只获得Entidad.Nombre ==“Empresa”的项目.我错了吗?什么是更好的?
var listFields = from b in unitOfWork.PropiedadRepository.Get() where b.Entidad.Nombre == "Empresa" select b; var listFields2 = unitOfWork.PropiedadRepository.Get().Where(x => x.Entidad.Nombre == "Empresa"); var listFields3 = unitOfWork.PropiedadRepository.Get(x => x.Entidad.Nombre == "Empresa"); 这是GenericRepository类.所有的存储库都继承了它. public sealed class GenericRepository<TEntity> where TEntity : class { private readonly ConfigurationDbDataContext _context; private readonly DbSet<TEntity> _dbSet; public GenericRepository(ConfigurationDbDataContext context) { _context = context; _dbSet = context.Set<TEntity>(); } public IEnumerable<TEntity> Get( Expression<Func<TEntity,bool>> filter = null,Func<IQueryable<TEntity>,IOrderedQueryable<TEntity>> orderBy = null,string includeProperties = "") { IQueryable<TEntity> query = _dbSet; if (filter != null) { query = query.Where(filter); } query = includeProperties.Split(new[] {','},StringSplitOptions.RemoveEmptyEntries).Aggregate(query,(current,includeProperty) => current.Include(includeProperty)); // ReSharper disable once ConvertIfStatementToReturnStatement if (orderBy != null) { return orderBy(query).ToList(); } else { return query.ToList(); } } public TEntity GetById(object id) { return _dbSet.Find(id); } public void Insert(TEntity entity) { _dbSet.Add(entity); } public void Delete(object id) { var entityToDelete = _dbSet.Find(id); Delete(entityToDelete); } public void Delete(TEntity entityToDelete) { if (_context.Entry(entityToDelete).State == EntityState.Detached) { _dbSet.Attach(entityToDelete); } _dbSet.Remove(entityToDelete); } public void Update(TEntity entityToUpdate) { _dbSet.Attach(entityToUpdate); _context.Entry(entityToUpdate).State = EntityState.Modified; } } 解决方法
你是对的.
在最后一种情况下,where子句的评估被赋予dataserver(linq to entities),客户端只接收过滤后的数据. 在其他情况下,客户端接收所有数据,然后过滤它(linq到对象). 那说:我们在谈论什么表现? CPU,网络,客户端,服务器端? 通常,人们更喜欢让服务器过滤所以linq到实体,但它实际上取决于一些参数和目标. 请注意linq与实体和linq to object之间最令人惊讶的区别:linq to object是区分大小写的.对于linq到实体,它依赖于数据库/表/列排序规则. 此外,正如Kaspars所提醒的,尾随空格的处理是不同的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |