问题描述
varsupplierDataList=supplierList.Select(supplier=>new{supplierName=supplier,supplyData=new{price=fromquoteDateinquoteDateListjoinmodelinmodelList.Where(model=>model.MB_Supplier==supplier)//依赖supplieronquoteDateequalsmodel.MB_QuoteDateintoresultListfromresultinresultList.DefaultIfEmpty(newMI_MaterialBase())selectresult.aaaval=fromquoteDateinquoteDateListjoinmodelinmodelList.Where(model=>model.MB_Supplier==supplier)//依赖supplieronquoteDateequalsmodel.MB_QuoteDateintoresultListfromresultinresultList.DefaultIfEmpty(newMI_MaterialBase())selectresult.bbb}});问题:如果按上面这样写,重复代码太多。想把Select每项产生的resultList存到外部变量,实现类似下面的效果,请问该如何实现?伪代码:varsupplierDataList=supplierList.Select(supplier=>new{supplierName=supplier,supplyData=new{price=fromquoteDateinquoteDateListjoinmodelinmodelList.Where(model=>model.MB_Supplier==supplier)//依赖supplieronquoteDateequalsmodel.MB_QuoteDateintoresultListfromresultinresultList.DefaultIfEmpty(newMI_MaterialBase())selectresult.aaavartempList=resultList;val=fromresultintempList.DefaultIfEmpty(newMI_MaterialBase())selectresult.bbb}});
解决方案
解决方案二:
求大神分享思路啊~
解决方案三:
在linq中刻意使用let语句。例如int[]datas=newint[]{1,2,3,4,7,8,9};varquery=fromxindataslety=fromuindataswhereu>=x+xselectxletcnt=y.Count()selectnew{lst=y,avg=y.Average(),sum=y.Sum(),length=cnt};
解决方案四:
刻意-->可以int[]datas=newint[]{1,2,3,4,7,8,9};varquery=fromxindataslety=fromuindataswhereu>=x+xselectuletcnt=y.Count()selectnew{lst=y,avg=y.Average(),sum=y.Sum(),length=cnt};
let就相当于var,用在linq之中,而不是之外。可以在linq外定义变量并用在linq中使用。但是不要轻易使用超过作用域的变量,应该优先使用let。
解决方案五:
引用3楼sp1234的回复:
刻意-->可以int[]datas=newint[]{1,2,3,4,7,8,9};varquery=fromxindataslety=fromuindataswhereu>=x+xselectuletcnt=y.Count()selectnew{lst=y,avg=y.Average(),sum=y.Sum(),length=cnt};let就相当于var,用在linq之中,而不是之外。可以在linq外定义变量并用在linq中使用。但是不要轻易使用超过作用域的变量,应该优先使用let。
lety这样只在varquery的作用域才有用,在其它的变量中,例如varvalue中,想要复用之前的lety,就无力了...
解决方案六:
瞅了这么久,也捣鼓了半天,还是说下我的思路吧。这种方式还是有缺陷,有没有大神给出更加优雅的解决方法?List<MI_MaterialBase>tempList;varsupplierDataList=supplierList.Select(supplier=>new{supplierName=supplier,supplyData=new{price=(fromquoteDateinquoteDateListjoinmodelinmodelList.Where(model=>model.MB_Supplier==supplier)//依赖supplieronquoteDateequalsmodel.MB_QuoteDateintoresultListfromresultinresultList.DefaultIfEmpty(newMI_MaterialBase())selectresult).Select((item,i)=>{if(i==0)//这样判断有个缺陷,无法知道是否到了最后一项,有没有解决办法?{tempList.Clear();}tempList.Add(item);returnt.aaa;}),}),val=tempList.Select(t=>{returnt.bbb;})}});