【发布时间】:2015-12-14 12:09:15
【问题描述】:
我想为 IQueryable 和 IEnumerable 使用一种方法:
public static IEnumerable<T> WhereEx<T>(this IEnumerable<T> query, Expression<Func<T, bool>> exp)
{
return query.AsQueryable().Where(exp);
}
public static IEnumerable<Ship> GetShipsSome(this IEnumerable<Ship> query)
{
return query.WhereEx(x => x.Id > 150);
}
使用: 使用 IQueryable:
var x = context.Set<Ships>().AsNoTracking().GetShipsSome(); //from DB
使用 IEnumerable:
var x = shipsInRam.GetShipsSome(); //from collection in ram(list)
但是如果我使用IEnumerable(从内存中的集合中获取),我的代码比IEnumerable.Where 慢,因为AsQueryable() 转换集合。如何优化我的代码?
修复:FirstOrDefault 而不是 Where
【问题讨论】:
-
query是IEnumerable还是IQueryable? -
查询可以是IEnumerable和IQueryable
-
你在做性能测试时通过了什么?
-
shipsInRam.AsQueryable().Where(exp);vsshipsInRam.Where(exp); -
你的
shipsInRam绝对是实际上在内存中吗?你能试试shipsInRam.ToList().AsQueryable().Where(exp)vsshipsInRam.ToList().Where(exp)吗?
标签: c# entity-framework linq iqueryable