Linq和列表清单

时间:2015-01-06 01:09:39

标签: c# linq

重要提示:我想使用Linq执行此操作。

我有一个设备列表,其中有一个选项列表。假设有5个设备,每个设备都有几个选项。

现在我需要获取其选项名称包含"脚踏板"并将其安装设置为" true"。

由于

代码如下:

public class Device
{
    public Int32 ID { get; set; }
    public String Name { get; set; }
    public List<Option> Options { get; set; }
}

public class Option
{
    public Int32 ID { get; set; }
    public String Name { get; set; }
    public Boolean Installed { get; set; }
}

public class DeviceTest
{
    public DeviceTest()
    {
        List<Device> devices = new List<Device>();
        Option option;
        Device device;

        device = new Device();
        device.ID = 1;
        device.Name = "WC-1";
        devices.Add(device);

        device.Options = new List<Option>();
        option = new Option();
        option.ID = 1001;
        option.Name = "Foot pedal";
        option.Installed = true;
        device.Options.Add(option);

        option = new Option();
        option.ID = 1002;
        option.Name = "Wheel";
        option.Installed = true;
        device.Options.Add(option);

        device = new Device();
        device.ID = 2;
        device.Name = "WC-2";
        devices.Add(device);

        device.Options = new List<Option>();
        option = new Option();
        option.ID = 1003;
        option.Name = "Foot pedal";
        option.Installed = true;
        device.Options.Add(option);

        option = new Option();
        option.ID = 1004;
        option.Name = "Wheel";
        option.Installed = true;
        device.Options.Add(option);

        device = new Device();
        device.ID = 3;
        device.Name = "WC-3";
        devices.Add(device);

        device.Options = new List<Option>();
        option = new Option();
        option.ID = 1005;
        option.Name = "Foot pedal";
        option.Installed = false;
        device.Options.Add(option);

        option = new Option();
        option.ID = 1006;
        option.Name = "Wheel";
        option.Installed = true;
        device.Options.Add(option);

        device = new Device();
        device.ID = 4;
        device.Name = "WC-4";
        devices.Add(device);

        device.Options = new List<Option>();
        option = new Option();
        option.ID = 1007;
        option.Name = "Foot pedal";
        option.Installed = false;
        device.Options.Add(option);

        option = new Option();
        option.ID = 1008;
        option.Name = "Wheel";
        option.Installed = false;
        device.Options.Add(option);
    }
}

2 个答案:

答案 0 :(得分:2)

这是一个非常简单的查询:

allDevices.Where(d => d.Options.Any(o => o.Name == "Foot Pedal" && o.Installed));

请记住,lambda只是一个函数。它可以调用其他函数,声明变量以及普通代码中可以执行的所有其他操作。

答案 1 :(得分:0)

var targetDevices = devices.Where(i => i.Options.Any(j => j.Installed && j.Name == "Foot pedal")).ToList()

var targetDevice = 
  (from device in devices 
   from option in device.Options
   where option.Installed && option.Name == "Foot pedal"
   select device).ToList()

注意最后的ToList(),如果结果为null,则返回空列表而不是null。