C# 将foreach循环减少为linq查询 var inventionIds=新列表(); 列表产品报酬报告列表= GetAllProductRemunerationReportingPeriodByProductId(productId); foreach(productRemunerationReportingList中的期间) { var发明列表=RPT期间发明; foreach(发明列表中的var链接) { int id=link.Invention.InventionId; 发明id。添加(id); } } 返回发明ID;

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

我想尽量减少两个循环。请为此提供一个nhibernate linq查询。任何帮助都非常重要。

请使用原始变量名:

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>();