【问题标题】:How to convert nested foreach loop into LINQ query in C#如何在 C# 中将嵌套的 foreach 循环转换为 LINQ 查询
【发布时间】:2020-12-07 05:07:40
【问题描述】:

如何在 C# 中将嵌套的 foreach 循环转换为 LINQ 查询,我想在查询结果后返回列表。 列表将返回值和描述。 下面的代码工作正常,但我需要将这 2 个 foreach 循环转换为单个 LINQ 查询。

        List<ListItem> listCodes = new List<ListItem>();
    
        foreach (var staticValueGroupMember in staticValueGroupMembers)
        {
            string description = string.Empty;
            if (staticValueGroupMember != null)
            {
                foreach (var staticValue in staticValues)
                {
                    if (staticValue.Value == staticValueGroupMember.MemberCode.ToString())
                    {
                        description = staticValue.Description;
                        break;
                    }

                }

                listCodes.Add(new ListItem() { Value = staticValueGroupMember.MemberCode.ToString(), Description = description });
            }
        }

        return listCodes;

【问题讨论】:

    标签: c# linq foreach


    【解决方案1】:

    这几乎是直接翻译。

    List<ListItem> listCodes =
    (
        from staticValueGroupMember in staticValueGroupMembers
        where staticValueGroupMember != null
        join staticValue in staticValues
            on staticValueGroupMember.MemberCode.ToString() equals staticValue.Value
        select new ListItem()
        {
            Value = staticValueGroupMember.MemberCode.ToString(),
            Description = staticValue.Description
        }
    ).ToList();
    

    【讨论】:

    • 您好,我收到一个错误 - 不支持方法加入,异常 -> NotSupportedException
    • 由于我们在 WPF MVVM 中使用了 Ioc Unity Container ,因此我们不能使用 Join 来处理它抛出异常:Microsoft.Practices.unityResolutionFailedException
    • @AmanAgrawal - 你已经在问题中解释了这一点? staticValueGroupMembers & staticValues 有哪些类型?
    • 我将两者都存储为一个列表。就像下面 var staticValueGroupMembers = (来自 MetadataEntityFactory.Entities.StaticValueGroupMember 中的 staticValueGroupMember where staticValueGroupMember.SetCode == setCode && staticValueGroupMember.GroupCode == groupCode select staticValueGroupMember);
    • @AmanAgrawal Like Enigmativity 说这个异常不是由 Join、All、Any 引起的。 a)打开一个新问题,在其中提供确切的错误消息和堆栈跟踪。或者 b) 自己查看堆栈跟踪/使用调试器,它会准确地告诉你哪个方法和哪个代码路径导致了这个异常。
    【解决方案2】:

    试试下面的代码:

    var result = staticValueGroupMembers
        .Where(gm => gm != null)
        .Join(staticValues,
            outer => outer.MemberCode.ToString(),
            inner => inner.Value,
            (outer, inner) => new ListItem()
            {
                Value = outer.MemberCode.ToString(),
                Description = inner.Description
            })
        .ToList();
    

    这里是Join 方法的详细信息。

    【讨论】:

    • 无法使用 Join/LL/Any 获取 Microsoft.practices.unity.ResolutionFailedException 。
    猜你喜欢
    • 2011-06-07
    • 2014-03-16
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    • 2019-11-22
    相关资源
    最近更新 更多