存储过程还是LINQ?

时间:2011-01-03 11:08:44

标签: sql-server linq asp.net-mvc-2

我在ASP.net MVC 2中创建了一个带有数据库SQL服务器的网上商店。

如果我需要通过网上商店从数据库中的库存过滤特殊产品。

我应该选择哪些选项?为什么?

  1. 通过存储过程进行过滤?

  2. 使用LINQ作为C-sharp编码?

  3. 另一种解决方案?

2 个答案:

答案 0 :(得分:3)

如果你真的想优化你的sql,我只会使用存储过程。否则,如果你想保持它的灵活性并且可以轻松地插入过滤器,我会推荐一种类型的管道和过滤器模式。它会像这样工作:

public class ProductRepository
{
    public IQueryable<Prodcut> GetAll() 
    {
        return yourContext.Products;
    }
}

public static class ProductFilters
{
    public static IQueryable<Product> ByCategory(this IQueryable<Product> query, string category)
    {
        return query.Where(p => p.Category == category);
    }
}

在这种情况下,名称ProductRepository可能是错误的,因为它不是真正的存储库,更像是某种“桥”。但是这种模式允许您轻松添加其他过滤器,如扩展方法。从扩展方法和“存储库”返回IQueryable非常重要,这使得查询只能评估一次,您可以链接过滤器。

答案 1 :(得分:1)

我在类似情况下使用以下内容:

  1. Devart LinqConnect
  2. 创建存储过程(用于SQL优化)
  3. 将这些程序包含在模型中并使用complex types