C# 将foreach循环减少为linq查询 var inventionIds=新列表(); 列表产品报酬报告列表= GetAllProductRemunerationReportingPeriodByProductId(productId); foreach(productRemunerationReportingList中的期间) { var发明列表=RPT期间发明; foreach(发明列表中的var链接) { int id=link.Invention.InventionId; 发明id。添加(id); } } 返回发明ID;
我想尽量减少两个循环。请为此提供一个nhibernate linq查询。任何帮助都非常重要。请使用原始变量名:C# 将foreach循环减少为linq查询 var inventionIds=新列表(); 列表产品报酬报告列表= GetAllProductRemunerationReportingPeriodByProductId(productId); foreach(productRemunerationReportingList中的期间) { var发明列表=RPT期间发明; foreach(发明列表中的var链接) { int id=link.Invention.InventionId; 发明id。添加(id); } } 返回发明ID;,c#,.net,linq,C#,.net,Linq,我想尽量减少两个循环。请为此提供一个nhibernate linq查询。任何帮助都非常重要。请使用原始变量名: var inventionIds = new List<int>(); List<ProductRemunerationReportingPeriodLink> productRemunerationReportingList = GetAllProductRemunerationReportingPeriodByProductId(produ
var inventionIds = new List<int>();
List<ProductRemunerationReportingPeriodLink> productRemunerationReportingList =
GetAllProductRemunerationReportingPeriodByProductId(productId);
foreach (var rptPeriod in productRemunerationReportingList)
{
var inventionsList = rptPeriod.Inventions;
foreach (var link in inventionsList)
{
int id = link.Invention.InventionId;
inventionIds.Add(id);
}
}
return inventionIds;
与更好的命名相同:
var inventionIds =
productRemunerationReportingList.SelectMany(rptPeriod => rptPeriod.Inventions)
.Select(ProductRemunerationReportingPeriodInvention => ProductRemunerationReportingPeriodInvention.Invention.InventionId)
.ToList();
提示:变量名的长度应该和使用变量的范围相对应。全局可访问变量应具有良好的描述性名称。在短范围内使用的变量(如lambda)应具有非常短的名称。列出InnovationId=(来自productRemunerationReportingList中的rptPeriod)
var inventionIds = GetAllProductRemunerationReportingPeriodByProductId(productId)
.SelectMany(p => p.Inventions)
.Select(i => i.Invention.InventionId)
.ToList();
来自ProductRemunerationReportingPeriod中的发明
选择ProductRemunerationReportingPeriodInnovation.Innovation.Innovation.InnovationId).ToList();
我希望你不要觉得我把你的问题搞糟了。如果人们能够阅读,你会得到更好的答案。使用Resharper,因为在你编写这些循环时,该工具会自动将这些循环优化到linq中。谢谢你。你的解决方案很有魅力。从早上开始我就在尝试任何一种。
List<int> inventionIds = (from rptPeriod in productRemunerationReportingList
from ProductRemunerationReportingPeriodInvention in rptPeriod.Inventions
select ProductRemunerationReportingPeriodInvention.Invention.InventionId).ToList<int>();