Seb*_*n A 3 .net c# linq entity-framework
我正在使用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");
Run Code Online (Sandbox Code Playgroud)
这是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;
}
}
Run Code Online (Sandbox Code Playgroud)
你是对的.
在最后一种情况下,where子句的评估被赋予dataserver(linq to entities),客户端只接收过滤后的数据.
在其他情况下,客户端接收所有数据,然后过滤它(linq到对象).
那说:我们在谈论什么表现?CPU,网络,客户端,服务器端?
通常,人们更喜欢让服务器过滤器对实体进行过滤,但它实际上取决于某些参数和目标.
请注意linq与实体和linq to object之间最令人惊讶的区别:linq to object是区分大小写的.对于linq到实体,它依赖于数据库/表/列排序规则.
此外,正如Kaspars所提醒的,尾随空格的处理是不同的.
| 归档时间: |
|
| 查看次数: |
330 次 |
| 最近记录: |