代码之家  ›  专栏  ›  技术社区  ›  Matt McManis

从名称匹配的列表列中选择值

  •  1
  • Matt McManis  · 技术社区  · 6 年前

    我有一个不同列的列表, Name Bitrate .

    public class VideoQuality
    {
        public string Name { get; set; }
        public string Bitrate { get; set; }
    }
    
    public List<VideoQuality> quality = new List<VideoQuality>()
    {
         new VideoQuality() { Name = "High",   Bitrate = "5000K" },
         new VideoQuality() { Name = "Medium", Bitrate = "2500K" },
         new VideoQuality() { Name = "Low",    Bitrate = "500K" },
    };
    

    如何从列表中选择 比特率 High ?

    比如:

    if (selectedQuality == "High")
    {
        // Select High Bitrate from List
        string vBitrate = quality.Select(x => x.Bitrate)
                                 .Where(Name = "High");
    }
    

    vBitrate 应该等于 5000K .

    2 回复  |  直到 6 年前
        1
  •  6
  •   Gilad Green Fábio    6 年前

    首先要筛选,然后选择:

    var result = quality.Where(x => x.Name == "High")
                        .Select(x => x.Bitrate); //IEnumerable<string>
    

    在查询语法中:

    var result = from x in quality
                 where x.Name == "High"
                 select x.Bitrate; //IEnumerable<string>
    

    注意,在任何情况下,如果 IEnumerable<string> 不是一个项目。如果只需要一个项目,则使用 FirstOrDefault / First / Single , SingleOrDefault :

    var result = quality.FirstOrDefault(x => x.Name == "High")?.Bitrate; //string
    

    有关不同方法之间的差异,请参阅文档和 LINQ: When to use SingleOrDefault vs. FirstOrDefault() with filtering criteria .

        2
  •  3
  •   Dmitrii Bychenko    6 年前

    如果你最多期待 我建议您返回的值 FirstOrDefault :

    string vBitrate = quality
      .FirstOrDefault(item => item.Name == "High")
     ?.BitRate;