是否可以告诉我是否在调用CreateObjectSet
的行上是否返回整个表然后执行Where表达式(在内存中)或者是生成的SQL中包含的where表达式?
public virtual T GetById(int Id)
{
if (Id != 0)
{
PropertyInfo PrimaryKey = GetPrimaryKey();
var ItemParameter = Expression.Parameter(typeof(T), "item");
var WhereExpression = Expression.Lambda<Func<T, bool>>
(Expression.Equal(
Expression.Property(
ItemParameter,
PrimaryKey.Name
),
Expression.Constant(Id)
),
new[] { ItemParameter }
);
T Entity = GetObjectContext().CreateObjectSet<T>().Where(WhereExpression).SingleOrDefault<T>();
GetObjectContext().Refresh(RefreshMode.StoreWins, Entity);
return Entity;
}
else
{
return null;
}
}
答案 0 :(得分:0)
CreateObjectSet<T>()
返回ObjectSet<T>
类型的实例,此类实现IQueryable<T>
。调用IQueryable
的方法将被转换为SQL。
您正在呼叫IQueryable<T>.Where(Expression<Func<T, bool>> predicate)
。
因此条件将应用于您的数据库,并且最多只会获取两行,而不是整个表。