数据访问层基于多个属性查找记录

时间:2013-05-30 09:23:59

标签: c# entity-framework-4 data-access-layer dto

我在c#中编写数据访问层以查找数据库中的库存商品。我有一个像getStockItemByStockCode(string stockCode)这样的方法很简单,但是你如何编写一个基于属性组合查找stockItem的方法?

例如,如果我将StockFilter对象传递给方法并设置我想要过滤的属性,如何创建实体框架查询来实现此目的而不会让它变得错综复杂?或者我应该只获取所有记录并在业务层中过滤它们,这对我来说听起来不对,因为这意味着我将带回我不需要的数据。

这是我用来通过股票代码获取库存项目的方法:

    public StockDTO getStockItemByStockCode(string stockCode)
    {

        StockDTO stockItem = null;

        using (var db = new DbContext())
        {
            var aStock = (from stock in db.STK_MASTER
                        where stock.STOCK_CODE.Equals(stockCode)
                        select stock).Single();


            Mapper.CreateMap<STK_MASTER, StockDTO>();
            StockDTO stockDto = Mapper.Map<STK_MASTER, StockDTO>(aStock);

            stockItem = stockDto;

        }
        return stockItem;

    }

这是方法标题,我想根据属性的组合来获取我的库存项目:

public StockDTO getStockItem(StockFilter stockProperties)

我可以用这种模式或其他东西吗? 库存商品属性可能包括上次销售日期,销售数量,价格范围等。

1 个答案:

答案 0 :(得分:0)

我找到了这个 - Creating dynamic queries with entity framework

我相信这可以解决我找到库存商品的问题。但是,如果我必须检查我可能想要过滤的每个属性并且必须为每个实体DAL执行此操作,我可以看到我的方法变得庞大。

如果有更好的方法,请告诉我。

Expression<Func<T, bool>> 

是通用存储库模式吗?在最佳实践和代码解耦/可维护性方面,这会比给定链接中的解决方案更好吗?