>我正在尝试比较两个列表以添加(在另一个列表中(我想要的灯光。 我想通过字符串名称获取光对象
目前,我正在使用双倍的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();