0

谁能告诉我是否在调用它的行上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;
        }
    }
4

1 回答 1

0

CreateObjectSet<T>()返回该类型的一个实例,ObjectSet<T>该类实现IQueryable<T>. 调用的方法IQueryable将被转换为 SQL。

你在打电话IQueryable<T>.Where(Expression<Func<T, bool>> predicate)

因此,该条件应用于您的数据库,最多只会获取两行,而不是整个表。

于 2013-06-14T07:30:34.940 回答