相关疑难解决方法(0)

返回IEnumerable <T>与IQueryable <T>

返回IQueryable<T>IEnumerable<T>?有什么区别?

IQueryable<Customer> custs = from c in db.Customers
where c.City == "<City>"
select c;

IEnumerable<Customer> custs = from c in db.Customers
where c.City == "<City>"
select c;
Run Code Online (Sandbox Code Playgroud)

两者都会延迟执行,何时应该优先于另一个?

c# linq ienumerable iqueryable linq-to-sql

1051
推荐指数
13
解决办法
22万
查看次数

为每个对象创建通用存储库与特定存储库的优势?

我们正在开发ASP.NET MVC应用程序,现在正在构建存储库/服务类.我想知道创建一个所有存储库实现的通用IRepository接口是否有任何重大优势,而每个存储库都有自己独特的接口和方法集.

例如:一个通用的IRepository接口可能看起来像(取自这个答案):

public interface IRepository : IDisposable
{
    T[] GetAll<T>();
    T[] GetAll<T>(Expression<Func<T, bool>> filter);
    T GetSingle<T>(Expression<Func<T, bool>> filter);
    T GetSingle<T>(Expression<Func<T, bool>> filter, List<Expression<Func<T, object>>> subSelectors);
    void Delete<T>(T entity);
    void Add<T>(T entity);
    int SaveChanges();
    DbTransaction BeginTransaction();
}
Run Code Online (Sandbox Code Playgroud)

每个Repository都会实现此接口,例如:

  • CustomerRepository:IRepository
  • ProductRepository:IRepository
  • 等等

我们在之前的项目中遵循的备选方案是:

public interface IInvoiceRepository : IDisposable
{
    EntityCollection<InvoiceEntity> GetAllInvoices(int accountId);
    EntityCollection<InvoiceEntity> GetAllInvoices(DateTime theDate);
    InvoiceEntity GetSingleInvoice(int id, bool doFetchRelated);
    InvoiceEntity GetSingleInvoice(DateTime invoiceDate, int accountId); //unique
    InvoiceEntity CreateInvoice();
    InvoiceLineEntity CreateInvoiceLine();
    void SaveChanges(InvoiceEntity); //handles inserts or updates
    void DeleteInvoice(InvoiceEntity);
    void …
Run Code Online (Sandbox Code Playgroud)

architecture asp.net asp.net-mvc

131
推荐指数
4
解决办法
3万
查看次数

要返回IQueryable <T>或不返回IQueryable <T>

我有一个存储库类,它包装了我的LINQ to SQL数据上下文.存储库类是一个业务线类,包含所有数据层逻辑(以及缓存等).

这是我的repo界面的v1.

public interface ILocationRepository
{
    IList<Location> FindAll();
    IList<Location> FindForState(State state);
    IList<Location> FindForPostCode(string postCode);
}
Run Code Online (Sandbox Code Playgroud)

但是为了处理FindAll的分页,我正在讨论是否要公开IQueryable <ILocation>而不是IList来简化分页等环境的接口.

从数据仓库中暴露IQueryable的利弊是什么?

很感谢任何形式的帮助.

.net c# iqueryable linq-to-sql

73
推荐指数
2
解决办法
2万
查看次数