将此双重匹配转换为LINQ

本文关键字:转换 LINQ | 更新日期: 2023-09-27 18:21:21

我有一个列表框,用户可以在其中从他们预订的公交车中选择一个或多个公交车号码(用于升级)。我还有一份一个人预订的所有巴士的清单BusFactory.lstBus

这很好,但我想要的是一种在linq中实现它的方法。细分是它获取用户选择的所有号码,并将其与用户预订的公交车进行匹配,然后返回公交车列表。

    private void btnAdd_Click(object sender, EventArgs e)
    {
        List<Bus> lstBuses = getSelectedBuses();
    }
    private List<Bus> getSelectedBuses()
    {
        List<Bus> lstBus = new List<Bus>();
        foreach (string s in lstBuses.SelectedItems)
        {
            foreach (Bus bus in BusFactory.lstBuses)
            {
                if (s == bus.ElementNumber.ToString())
                    lstBus.Add(bus);
            }
        }
        return lstBus;
    }

将此双重匹配转换为LINQ

lstBuses.SelectedItems.Cast<string>().Intersect(
    BusFactory.lstBuses.Select(b => b.ElementNumber.ToString())
)

这具有O(n)而不是O(n2

的额外好处