如何在LINQ中编写此代码块?

时间:2019-05-20 17:26:12

标签: c# linq

我需要尽可能多地使用linq,而且我不知道如何在这种类型的方法中使用linq。

我已经尝试了某些网站上的一些代码,但是它们都不起作用

List<MemorableD> memorables = new List<MemorableD>();
    List<StateMD> states = new List<StateMD>();
    void Find(List<MemorableD> selected)
    {
        for (int i = 0; i < states.Count; i++)
        {
            for (int j = 0; j < memorables.Count; j++)
            {
                if (states[i].Month == memorables[j].Month && states[i].Day == memorables[j].Day)
                {
                    MemorableD select = new MemorableD(memorables[j].Year, memorables[j].Month, memorables[j].Day, memorables[j].Event, states[i].Event);
                    selected.Add(select);
                }
            }
        }
    }

我需要用LINQ编写这种添加方法

1 个答案:

答案 0 :(得分:1)

尝试解决您的问题。如果要分析循环,则要遍历State和Memorables,并创建MemorableD实例,其中State和Memorable具有相同的Month和Day,然后将它们添加到列表中。

将其翻译为Linq,

from StateMD state in states
from MemorableD memorable in memorables
    where state.Month == memorable.Month && state.Day == memorable.Day
let selectValue = new MemorableD(memorable.Year, memorable.Month, memorable.Day, memorable.Event, state.Event)
select selectValue

问题的第二部分是将其添加到名为selected的列表中。您可以使用AddRange方法将IEnumerable添加到所选内容。

因此,将Linq语句与AddRange方法结合起来,

selected.AddRange(from StateMD state in states
                              from MemorableD memorable in memorables
                              where state.Month == memorable.Month && state.Day == memorable.Day
                              let selectValue = new MemorableD(memorable.Year, memorable.Month, memorable.Day, memorable.Event, state.Event)
                              select selectValue);