有什么方法可以用linq或其他更好的方法编写此foreach,

int itemNr = -1;
foreach(ItemDoc itemDoc in handOverDoc.Assignment.Items) {

    itemNr++;
    foreach(ItemDetailDoc detail in itemDoc.Details) {
        int eventDocNr = -1;

        foreach(EventDoc eventDoc in detail.Events) {
            eventDocNr++;

            if(!eventDoc.HasEAN) {
                HideShowPanels(pMatch);
                txt_EAN.Text = String.Empty;

                lbl_Match_ArtName.Text = itemDoc.Name;
                lbl_ArtNr.Text = itemDoc.Number;
                lbl_unitDesc.Text = eventDoc.Description;

                m_tempItemNr = itemNr;
                m_tempEventNr = eventDocNr;
                txt_EAN.Focus();

                return;
            }
        }
    }
}


我只是认为这不是编写它的正确方法。请指教。

最佳答案

您可以尝试以下LINQ:

var nonEANs = from ItemDoc itemDocs in itemDocList
              from ItemDetailDoc itemDetailDocs in itemDocs.Details
              from EventDoc eventDocs in itemDetailDocs.Events
              where !eventDocs.HasEAN
              select eventDocs;


foreach (var i in nonEANs)
{
    System.Diagnostics.Debug.WriteLine( i.HasEAN);
}


应该返回7个错误的EAN:我重新创建了您这样的嵌套结构

List<ItemDoc> itemDocList = new List<ItemDoc>()
{
    new ItemDoc()
    {
         Details = new List<ItemDetailDoc>()
         {
             new ItemDetailDoc()
             {
                  Events = new List<EventDoc>()
                  {
                      new EventDoc()
                      {HasEAN=false},
                      new EventDoc()
                      {HasEAN=false}
                  }
             },
             new ItemDetailDoc()
             {
                  Events = new List<EventDoc>()
                  {
                      new EventDoc()
                      {HasEAN=true},
                      new EventDoc()
                      {HasEAN=false}
                  }
             }
         }
    },
    new ItemDoc()
    {
         Details = new List<ItemDetailDoc>()
         {
             new ItemDetailDoc()
             {
                  Events = new List<EventDoc>()
                  {
                      new EventDoc()
                      {HasEAN=false},
                      new EventDoc()
                      {HasEAN=false}
                  }
             },
             new ItemDetailDoc()
             {
                  Events = new List<EventDoc>()
                  {
                      new EventDoc()
                      {HasEAN=false},
                      new EventDoc()
                      {HasEAN=false}
                  }
             }
         }
    }
};

关于c# - 有关foreach的C#LINQ问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2415401/

10-17 01:35