每个双人为linq

San*_*mar -2 .net c# linq asp.net c#-4.0

我很高兴使用linq并且无法将以下双重foreach重写为linq查询

foreach(var country in europe)
{
    foreach(var europianCountry in unitedKingdom)
    {
        if (country.language == europianCountry.language)
        {
            countries.add (country.language);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*ert 5

首先翻译内循环:

foreach(var country in europe)
{ 
    countries.AddRange ( 
        from europeanCountry in unitedKingdom 
        where country.language = europeanCountry.language 
        select country.language);
}
Run Code Online (Sandbox Code Playgroud)

然后翻译外循环:

    countries.AddRange ( 
        from country in europe
        from europeanCountry in unitedKingdom 
        where country.language = europeanCountry.language 
        select country.language )
Run Code Online (Sandbox Code Playgroud)

然后意识到你正在做一个过滤的交叉产品,这在逻辑上是一个连接:

countries.AddRange (
    from country in europe
    join europeanCountry in unitedKingdom 
    on country.language equals europeanCountry.language
    select country.language
)
Run Code Online (Sandbox Code Playgroud)

现在,我注意到可能有更有效和合理的方法来构建此查询."有没有更好的方法来构建这个查询?" 不是你问的问题; "我如何将循环转换为查询?" 是你暗示的问题 - 我注意到实际上没有问过任何问题.

你一次做一个循环.将每个循环正确翻译,然后转到下一个循环.