关于foreach的C# LINQ问题

标签 c# linq

有没有办法用 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;
            }
        }
    }
}

我只是觉得这不是正确的写法。请指教。

最佳答案

如果不需要 itemNr 和 eventDocNr,您可以使用:

var item =
            (from itemDoc in handOverDoc.Assignment.Items
             from detail in itemDoc.Details
             from eventDoc in detail.Events
             where !eventDoc.HasEAN
             select new 
                {
                    Name = itemDoc.Name,
                    Number = itemDoc.Number,
                    Description = eventDoc.Description 
                }).FirstOrDefault();

if (item != null)
{
    HideShowPanels(pMatch);
    txt_EAN.Text = String.Empty;

    lbl_Match_ArtName.Text = item.Name;
    lbl_ArtNr.Text = item.Number;
    lbl_unitDesc.Text = item.Description;

    txt_EAN.Focus();
}

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

相关文章:

c# - 如何使用表达式设置属性值?

c# - Entity Framework 中的意外行为

c# - 使用 DesignMode 属性与 LicenseManager.UsageMode

c# - WPF TimeSpan 绑定(bind)到没有毫秒的标签

C# ListBox Selected Item Null异常

sql - LinqToSQL 不更新数据库

c# - 使用 LINQ where(lamdaexp).First 和 First(lambdaexp)

c# - 如何在列表中查找总和小于或等于数字的项目

c# - await Task.WhenAll(tasks) 异常处理,记录来自任务的所有异常

c# - 为什么这个克隆不起作用?