Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ将平面列表合并到层次结构中_C#_Linq - Fatal编程技术网

C# 使用LINQ将平面列表合并到层次结构中

C# 使用LINQ将平面列表合并到层次结构中,c#,linq,C#,Linq,这应该起作用: foreach (SuperHeroModel superHero in superHeros) { IEnumerable<int> superHeroPowerIds = superHero.Powers.Select(p => p.PowerId); List<PowerModel> superHeroPowers = powers.Where(power => superHeroPowerIds.Contains(pow

这应该起作用:

foreach (SuperHeroModel superHero in superHeros)
{
    IEnumerable<int> superHeroPowerIds = superHero.Powers.Select(p => p.PowerId);
    List<PowerModel> superHeroPowers = powers.Where(power => superHeroPowerIds.Contains(power.PowerId)).ToList();

    superHero.Powers = superHeroPowers;
}
foreach(超级英雄中的超级英雄模型)
{
IEnumerable PowerId=superHero.Powers.Select(p=>p.PowerId);
超级英雄.Powers=Powers.Where(p=>powerIds.Contains(p.PowerId));
}

MapToModel之后有什么?据我所知,您的
SuperHeroModel
应该有一些名为
Powers
的属性来保存实际
Power
对象的集合,而不仅仅是
powerid
?SuperHeroModel确实有一个名为Powers of type List的属性。我将查询限制为只包含Id,这样就有了一个唯一的键,我可以用来加入电源打开的平面列表。正如我所说,GetPowers中的工作非常昂贵,如果作为一个平面列表来完成,效果会更好,因此我不会在第一次查询中提取所有数据。@mbursill:我不明白,您是否至少需要获取一次权限?具体来说,是什么阻止了过滤器中英雄的
和英雄中的powerId。Powers在powerId等于power.Id时加入power…
Less
var
plz!上面的许多类型都是已知的。@Andrew对GetPower的调用不仅仅是一个EF查询。在不超出问题范围的情况下,可以肯定地说GetPowers是必要的。虽然我可以在Powers POCO的投影中包含更多内容,但似乎没有必要,因为最终它将被GetPowers调用的返回类型所取代。FirstOrDefault将从Powers集合中只返回一个PowerModel。它将失败,因为superHero.Powers是一个集合,因此需要分配给另一个集合。我在每个超级英雄的PowerModel中都保留了PowerId。Powers这样我就有了一个键,以后可以用来加入GetPowers on的结果。对不起,我当时很匆忙,误读了部分问题。我更新了答案。这是我已经想到的(见问题中的更新)。我想可能会有一种对林克更友好的方式,但我想这是最好的方式了。
List<PowerModel> powers = await GetPowers(powersData);
foreach (SuperHeroModel superHero in superHeros)
{
    IEnumerable<int> superHeroPowerIds = superHero.Powers.Select(p => p.PowerId);
    List<PowerModel> superHeroPowers = powers.Where(power => superHeroPowerIds.Contains(power.PowerId)).ToList();

    superHero.Powers = superHeroPowers;
}
foreach (SuperHeroModel superHero in superHeros)
{
    IEnumerable<int> powerIds = superHero.Powers.Select(p => p.PowerId);
    superHeros.Powers = powers.Where(p => powerIds.Contains(p.PowerId));
}