linq 在json对象中找到值时循环和停止的正确方式

nx7onnlm  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(115)

我试图在这个JSON中获取一个页面,我得到了我想要的值,但是它变成了null,因为循环不会停止,并且在没有正确值的情况下转到其他部分。在这里获取页面并在找到值时停止循环的最佳方法是什么?
代码

var pageId = 912;

   foreach(var section in SectionsObj)
        {
            page = section.Pages.Where(page => page.PageId == pageId).FirstOrDefault();      
        };

Json

{
   "sections":[
      {
         "sectionId":1,
         "sectionName":"xxx",
         "pages":[
            {
               "pageId":910,
               "pageName":"Profile Page 1"
            },
            {
               "pageId":911,
               "pageName":"Profile Page 2"
            }
         ]
      },
      {
         "sectionId":2,
         "sectionName":"xx",
         "pages":[
            {
               "pageId":912,
               "pageName":"Profile Page 1"
            },
            {
               "pageId":913,
               "pageName":"Profile Page 2"
            }
         ]
      },
      {
         "sectionId":3,
         "sectionName":"xxxx",
         "pages":[
            {
               "pageId":914,
               "pageName":"Profile Page 1"
            },
            {
               "pageId":915,
               "pageName":"Profile Page 2"
            }
         ]
      }
   ]
}
hsgswve4

hsgswve41#

将逻辑放入函数中,并在找到页面时返回:

var pageId = 912;

var page = FindPage(pageId, SectionsObj);

private Page FindPage(int id, IEnumerable<Section> sections)
{
    foreach(var section in sections)
    {
        page = section.Pages.FirstOrDefault(page => page.PageId == id);
        if (page != null)
        {
            return page;
        }
    }
    return null;
}
vqlkdk9b

vqlkdk9b2#

根据我的意见,您可以将代码缩短为:

var page = SectionsObj.SelectMany(s => s.Pages).FirstOrDefault(p => p.PageId == pageId);

相关问题