C# 嵌套Lambda表达式而不是foreach A类{ 公共B体{get;set;} } B类{ 公共列表位置{get;set;} } C类{ 公共字符串NameOfWeek{get;set;} } 上课周{ 公共int ID{get;set;} 公共字符串NameOfWeek{get;set;} } 类SomeX{ 公共列表MapWeekID(列表周列表、列表列表列表) { foreach(列表中的var a) { foreach(主体位置中的变量位置) { position.NameOfWeek=周列表 .Where(x=>x.NameOfWeek.ToString()==position.NameOfWeek) .选择(y=>y.NameOfWeek) .FirstOrDefault(); } } 回归主义者; } }

C# 嵌套Lambda表达式而不是foreach A类{ 公共B体{get;set;} } B类{ 公共列表位置{get;set;} } C类{ 公共字符串NameOfWeek{get;set;} } 上课周{ 公共int ID{get;set;} 公共字符串NameOfWeek{get;set;} } 类SomeX{ 公共列表MapWeekID(列表周列表、列表列表列表) { foreach(列表中的var a) { foreach(主体位置中的变量位置) { position.NameOfWeek=周列表 .Where(x=>x.NameOfWeek.ToString()==position.NameOfWeek) .选择(y=>y.NameOfWeek) .FirstOrDefault(); } } 回归主义者; } },c#,lambda,foreach,C#,Lambda,Foreach,这是代码。 如何为上述foreach语句编写lambda?我正在尝试,但无法找到最好的解决方案,所以任何人都可以?Linq和扩展方法不应该真正尝试解决所有问题。然而,如果你真的需要一个语句中的所有内容,你可以使用这个 class A{ public B body { get; set; } } class B{ public List<C> positions { get; set; } } class C{ public string NameOfWee

这是代码。 如何为上述foreach语句编写lambda?我正在尝试,但无法找到最好的解决方案,所以任何人都可以?

Linq和扩展方法不应该真正尝试解决所有问题。然而,如果你真的需要一个语句中的所有内容,你可以使用这个

class A{
    public B body { get; set; }
}

class B{
    public List<C> positions { get; set; }
}

class C{
    public string NameOfWeek { get; set; }
}

class week{
    public int ID { get; set; }
    public string NameOfWeek { get; set; }
}

class SomeX{
    public List<A> MapWeekID(List<week> weekList, List<A> AList)
        {
            foreach (var a in AList)
            {
                foreach (var position in a.body.positions)
                {
                    position.NameOfWeek = weekList
                        .Where(x => x.NameOfWeek.ToString() == position.NameOfWeek)
                        .Select(y => y.NameOfWeek)
                        .FirstOrDefault();
                }
            }

            return AList;
        }
}
注意:如果这是我桌上的代码审查,我会把它寄回来,并附上一张便条,上面写着:“我的眼睛!!!”,请重构

基本上,您的原始
foreach
易于阅读和维护。它不想太花哨,你可以很容易地看到发生了什么。这些品质比把所有东西都放在一个语句中要重要得多。

Linq和扩展方法不应该真正尝试解决所有问题。然而,如果你真的需要一个语句中的所有内容,你可以使用这个

class A{
    public B body { get; set; }
}

class B{
    public List<C> positions { get; set; }
}

class C{
    public string NameOfWeek { get; set; }
}

class week{
    public int ID { get; set; }
    public string NameOfWeek { get; set; }
}

class SomeX{
    public List<A> MapWeekID(List<week> weekList, List<A> AList)
        {
            foreach (var a in AList)
            {
                foreach (var position in a.body.positions)
                {
                    position.NameOfWeek = weekList
                        .Where(x => x.NameOfWeek.ToString() == position.NameOfWeek)
                        .Select(y => y.NameOfWeek)
                        .FirstOrDefault();
                }
            }

            return AList;
        }
}
注意:如果这是我桌上的代码审查,我会把它寄回来,并附上一张便条,上面写着:“我的眼睛!!!”,请重构


基本上,您的原始
foreach
易于阅读和维护。它不想太花哨,你可以很容易地看到发生了什么。这些特性比将所有内容都放在一条语句中要重要得多。

好吧,您可以使用linq函数SelectMany。以下是修改后的版本:

AList.SelectMany(x => x.body.positions)
     .ToList()
     .ForEach(
         position => 
            position.NameOfWeek = weekList.Where(x => x.NameOfWeek == position.NameOfWeek)
                                          .Select(y => y.NameOfWeek)
                                          .FirstOrDefault());

嗯,您可以使用linq函数SelectMany。以下是修改后的版本:

AList.SelectMany(x => x.body.positions)
     .ToList()
     .ForEach(
         position => 
            position.NameOfWeek = weekList.Where(x => x.NameOfWeek == position.NameOfWeek)
                                          .Select(y => y.NameOfWeek)
                                          .FirstOrDefault());

要修改现有集合(
AList
)时,Linq不是很好。我建议当您想要修改现有集合(
AList
)时,保持
foreach
Linq不是很好。我建议保留
foreach
谢谢你的积极评论:)谢谢你的积极评论:)