gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:34:06 25 4
gpt4 key购买 nike

// simple EF projection (anonymous type returned)
var superHerosData = from hero in filteredHeros
select new
{
hero.HeroId,
hero.FirstName
hero.LastName
Powers = from power in hero.Powers
select new
{
power.PowerId;
}
};

List<SuperHeroModel> superHeros = new List<SuperHeroModel>();

// populates superHeros (collection of SuperHeroModel) with the values in superHerosData
MapToModel(superHerosData, ref superHeros)

IQueryable<DAL.Models.Power> powersData = from hero in filteredHeros
from power in hero.Powers
select power;

获取权力是昂贵的,如果在单个操作(平面集合)中完成则性能更好

List<PowerModel> powers = await GetPowers(powersData);

我需要用 powers 集合中的匹配模型集合替换每个 SuperHeroModel(属于 superHeros 集合)中的 Powers 集合。

将简单的权力列表注入(inject) superHeros 的层次结构的 LINQ-to-objects 方法是什么?SuperHeroModel.Powers 当前包含一个 PowerModel 的集合,其中仅填充了 PowerId

更新:

像这样的东西可能有用,但感觉 Linq 不是很友好。我希望有一个更优雅的解决方案:

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));
}

关于c# - 使用 LINQ 将平面列表合并到层次结构中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19302243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com