首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免DB调用以减少内存

避免DB调用以减少内存
EN

Stack Overflow用户
提问于 2013-11-11 13:11:24
回答 2查看 117关注 0票数 2

我是林克的新手,请帮我解决我的问题。我试图避免DB调用,因为加载我的页面需要很长时间。

我的代码:

我每周计算一次零售商,这样我就能得到零售商的名单

代码语言:javascript
复制
var weeklyRetailers =
                result.Where(i => i.ManufacturerId == manufacturerRow.Id && i.CountryId == countryRow.Id
                                  && i.CategoryId == categoryRow.Id && i.Date >= localStart && i.Date <= localEnd);

现在,我让零售商行从DB访问零售商对象。

代码语言:javascript
复制
 var retailer = _retailerRepository.GetRetailer(weeklyRetailer.RetailerId);

备注

而不是为每个零售商调用DB,如果有太多的星期选择,这是太长的时间,所以我想避免Db调用。

所以我试着:

代码语言:javascript
复制
var retailersListToIterate = _retailerRepository.GetAllRetailersList();

我的存储库功能

代码语言:javascript
复制
    /// <summary>
    /// Return a list of retailer row 
    /// </summary>
    /// <returns></returns>
    public List<Retailer> GetAllRetailersList()
    {
        List<Retailer> a = (from aa in _er.Retailers
                           orderby aa.Description ascending
                           select aa).ToList();
        return a;
    } 

使用Linq

代码语言:javascript
复制
var retailer = retailersListToIterate.Where(i => i.Id == weeklyRetailer.RetailerId);

但这并不是将整个零售商行返回到访问零售商对象。

如有任何建议,将不胜感激。

谢谢..

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-11 13:20:13

结果

代码语言:javascript
复制
var retailer = retailersListToIterate.Where(i => i.Id == weeklyRetailer.RetailerId);

不是Retailer对象,这是IEnumerable<Retailer>。因此,您应该检查它的长度等,而不是使用ElementAt(0)对您的结果。

或者写

代码语言:javascript
复制
var retailer = retailersListToIterate.SingleOrDefault(i => i.Id == weeklyRetailer.RetailerId);

如果零售商Retailer是未知的,这将给你一个确切的IDnull

另外,如果我把你说对了,你有一些多重选择,并希望在一次获得选定零售商名单到DB。在这种情况下,您可以创建带有零售商ID的列表,并使用条件子句where myListOfIds.Contains(i.Id)查询DB。只要您不查询超过4000家零售商,这是安全的,因为这将在SQL中被翻译成SELECT FROM IN(ID1, ID2 ...)语句,这对in子句中的元素数量有限制。

票数 2
EN

Stack Overflow用户

发布于 2013-11-11 13:51:43

我预感到您正在对IEnumerable对象进行过滤。如果要对数据集执行DB操作并进行某些筛选,请始终对IQueryable对象进行筛选,而不是对IEnumerable(列表)对象进行筛选。会让你免于浪费很多时间。有关差异,请参见链接。IQueryable与IEnumerable的区别

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19907259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档