问题描述
各位大师,各位朋友们,求指引一个优化方式。1、数据库中商品明细表如下图2、图中圈起来的Store_No列表示可以访问这个商品的门店编号。3、用户登陆系统时,数组user_StoreArray存入了当前用户可以访问的门店编号,格式是这样的string[]user_StoreArray={"All","01"}。4、为了取得当前用户可以访问的所有商品记录,需要用数组user_StoreArray与商品表item的Store_No列进行匹配。5、我写了如下的代码:varlist=db.Item.Where(d=>user_StoreArray.Contains(d.Store_No)).ToList();for(inti=0;i<user_StoreArray.Length;i++){vartemp=db.Item.Where(d=>!user_StoreArray.Contains(d.Store_No)&&d.Store_No.Contains(user_StoreArray[i])).ToList();foreach(varitemintemp){if(list.Contains(item)==false){list.Add(item);}}}6、user_StoreArray.Contains(d.Store_No)这行代码转换后得到Sql的代码是Store_Noin('All','01')7、为了优化代码,提升效率特请各位老师,指导一个优化方法,非常感谢!
解决方案
解决方案二:
就几行代码不知道你需要优化什么、、、
解决方案三:
优化读数据库的方式,当前的方法有了循环多次读数据库效率低。
解决方案四:
引用1楼zifengshen1981的回复:
就几行代码不知道你需要优化什么、、、
优化读数据库的方式,当前的方法有了循环多次读数据库效率低。
解决方案五:
还是不明白你的意思。如果只是想构造where条件的话,直接将序号保存到字符串里面拼接出来,还用list去保存啥子哦
解决方案六:
你用非关系型字段了,就要有效率低的准备吧
解决方案七:
【数组列】已经违反了表设计的第一范式。
解决方案八:
进来学习一下
解决方案九:
这样的设计,想要提高效率比较麻烦,我个人建议,你可以再数据库增加一个视图,视图就是把所有的user_StoreArray与商品表item的Store_No对应关系显示出来。这样只需要view视图弄好了,然后用户登录,就可以直接查询视图了。因此,用户的查询速度回比较快。而view视图你在用户查询之前已经生成完毕了。所以和用户的登录就没有关系了。
解决方案十:
谢谢!感觉这样不错。