我在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)
我可以用这种模式或其他东西吗? 库存商品属性可能包括上次销售日期,销售数量,价格范围等。
答案 0 :(得分:0)
我找到了这个 - Creating dynamic queries with entity framework。
我相信这可以解决我找到库存商品的问题。但是,如果我必须检查我可能想要过滤的每个属性并且必须为每个实体DAL执行此操作,我可以看到我的方法变得庞大。
如果有更好的方法,请告诉我。
Expression<Func<T, bool>>
是通用存储库模式吗?在最佳实践和代码解耦/可维护性方面,这会比给定链接中的解决方案更好吗?