比较两个列表:一个包含对象,另一个包含字符串



>我正在尝试比较两个列表以添加(在另一个列表中(我想要的灯光。 我想通过字符串名称获取光对象

目前,我正在使用双倍的foreach,但我知道LinQ是可能的,但我不知道如何...

private readonly string[] lightsWanted = { "MyLight1", "MyLight2" };
---
var lights = await this.bridgeManager.GetLights();
foreach (Light light in lights)
{
foreach (string lightWanted in this.lightsWanted)
{
if (light.Name == lightWanted)
{
this.selectedLights.Add(light);
}
}
}

谢谢你的帮助。

您可以使用 Join 来实现目的

var selectedList = lights.Join(lightsWanted,x=>x.Name,y=>y,(x,y)=>x);

使用 Where 和 Contain(效率不高(。

List<Light> lightsIWant = (await this.bridgeManager.GetLights())
.Where(l => lightsWanted.Contains(l.Name))
.ToList();

使用联接(更高效(

var allLights = await this.bridgeManager.GetLights();
IEnumerable<Light> lightsIWant = from allLight in allLights
join desiredLightName in lightsWanted 
on allLight.Name equals desiredLightName
select allLight;

您也可以使用扩展方法进行连接,我只是更喜欢将查询语法用于像这样的简单内容。

这应该可以做到:

List<Light> lightsIwant = (from l in lights
join lw in lightsWanted on l.Name equals lw
select l).ToList();

相关内容

  • 没有找到相关文章

最新更新