我正在为基本的CRUD操作创建一个存储库,我有一个关于读取函数的问题。
我读到IQueryable
实现了IEnumerable
,所以。
我是否可以仅使用IQueryable
返回类型创建我的选择函数???
示例:
IQueryable<T> GetQuery()
和
IEnumerable<T> GetAll()
或仅查询功能?
IQueryable<T> GetAll()
谢谢!
答案 0 :(得分:0)
您可以从Microsoft DynamicQuery类下载,这将对您有所帮助,并使您的工作变得轻松。
http://msdn.microsoft.com/en-US/vstudio/bb964686.aspx
例如
public IEnumerable<T> GetAll<T>()
{
return this.AddIncludes(this.DbContext.Set<T>()).OrderBy (this.SortSpec.PropertyName).ToList();
}
public IEnumerable<T> Find(Expression<Func<T, bool>> expression)
{
return this.AddIncludes(this.DbContext.Set<T>()).Where(expression).OrderBy(sortingPropertyName).ToList();
}
阅读此博客:
将您的Repository模式与UnitOfWork模式相结合,这将为您提供更好的抽象。
repsoistory接口应仅包含以下重要方法:
public interface IRepository<T>
{
List<string> IncludeList { get; } // Include for EF
IEnumerable<T> GetAll<T>();
void Delete(T);
void Add(T);
IEnumerable<TEntity> Find(Expression<Func<T, bool>> expression);
}
如果你愿意的话,IRepository也可以提供其他方法,如Any,GetRange等。
现在你的Q!
I read that the IQueryable implements the IEnumerable, so. Can i create my select functions using only IQueryable return type or not???
“不同之处在于IQueryable是允许LINQ-to-SQL(LINQ.-to-anything真正)工作的接口。因此,如果您在IQueryable上进一步优化查询,该查询将在数据库中执行,如果可能的话。
对于IEnumerable情况,它将是LINQ-to-object,这意味着必须将与原始查询匹配的所有对象从数据库加载到内存中。 请参阅:Returning IEnumerable<T> vs. IQueryable<T>