C# 使用GenericResposity在linq到sql查询性能上的差异

C# 使用GenericResposity在linq到sql查询性能上的差异,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,假设我的数据层中有这样一个类 无需在数据层编写简单的单表选择,节省了大量时间,但我会后悔吗 编辑:@Skeet 实际上,我已经在一个相当大的WCF/Silverlight LOB项目中实现了这种方法,而我们的服务器CPU似乎正在努力跟上。创建/销毁额外对象的额外工作不可能归因于使用常规方法的项目中cpu使用率的增加?您没有显示“通用存储库”从何处获取其上下文-我假设它正在创建一个新的,并代理dispose调用 如果是这样的话,它基本上应该是一样的-我已经有一段时间没有研究GetTable()和使

假设我的数据层中有这样一个类

无需在数据层编写简单的单表选择,节省了大量时间,但我会后悔吗

编辑:@Skeet
实际上,我已经在一个相当大的WCF/Silverlight LOB项目中实现了这种方法,而我们的服务器CPU似乎正在努力跟上。创建/销毁额外对象的额外工作不可能归因于使用常规方法的项目中cpu使用率的增加?

您没有显示“通用存储库”从何处获取其上下文-我假设它正在创建一个新的,并代理dispose调用

如果是这样的话,它基本上应该是一样的-我已经有一段时间没有研究
GetTable()
和使用属性之间的区别了,但是如果属性只是调用
GetTable
本身,我也不会感到惊讶。除此之外,没有真正的区别


重要的一点是,在这两种情况下,您仍在使用
IQueryable
,因此查询仍将转换为SQL-如果您的
SelectAll
方法返回
IEnumerable
,那将是灾难性的。

您能在最后一行亮起灯吗?@Veer:如果该方法返回
IEnumerable
,查询表达式将使用LINQ来处理对象,在过程中而不是在SQL中进行过滤等。我不会这么认为。。。但请将其配置为检查。
public class GenericRepository<TEntity> where TEntity : class 
{

   public MyDataContext DataContext {get;set;}

   [System.ComponentModel.DataObjectMethod(System.ComponentModel.DataObjectMethodType.Select)]
   public IQueryable<TEntity> SelectAll()
   {
      return DataContext.GetTable<TEntity>();
   }
}
using (GenericRepositry<MyTable> mytable = new GenericRepositry<MyTable>())
{
   var myresult = from m in mytable.SelectAll()
                  where m.IsActive
                  select m;
}
using (MyDataContext ctx = new MyDataContext())
{
   var myresult = from m in ctx.MyTable
                  where m.IsActive
                  select m;
}