【问题标题】:Select List of some object property from Double level object list从双层对象列表中选择某些对象属性的列表
【发布时间】:2017-01-05 05:44:15
【问题描述】:

我有一些对象的双层列表。我想根据某些条件获取一些属性值的列表。

我有以下课程

public class Demo
{
    public string Prop1 {get; set;}
    public string Prop2 {get; set;}
}

我已经创建了上述类对象的双重列表

List<List<Demo>> lst = new List<List<Demo>>();

List<Demo> lstdemo1 = new List<Demo>
lstdemo1.Add(new Demo(){Prop1 = "1", Prop2="abc"});
lstdemo1.Add(new Demo(){Prop1 = "2", Prop2="pqr"});

List<Demo> lstdemo2 = new List<Demo>
lstdemo2.Add(new Demo(){Prop1 = "1", Prop2="mno"});
lstdemo2.Add(new Demo(){Prop1 = "2", Prop2="xyz"});

lst.Add(lstdemo1);
lst.Add(lstdemo2);

现在我想获取具有 Prop2 值的 List 取决于 Prop1 值 例如:我想获取 Prop2 的列表,其中 Prop1 等于“1”

我想要以下输出 List&lt;string&gt;lstoutput 其中包含

"abc","mno"

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    最简单的方法是利用 LINQ 的SelectMany 来展平列表。在查询语法中使用两个from 子句来完成此操作:

    var query = from x in lst
                from y in x
                where y.Prop1.Equals("1")
                select y.Prop2;
    

    或者,通过在方法语法中调用SelectMany

    var query = lst.SelectMany(x => x.Where(y => y.Prop1.Equals("1"))
                                     .Select(y => y.Prop2));
    

    【讨论】:

    • 没问题。如果您是 LINQ 新手,请不要忘记对结果调用 ToList() 以实际执行查询,尤其是当您要多次枚举列表时。
    【解决方案2】:

    使用SelectMany:

    var result = lst.SelectMany(o => o).Where(o => o.Prop1 == "1").Select(o => o.Prop2).ToList();
    

    【讨论】:

      猜你喜欢
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 2019-09-17
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      相关资源
      最近更新 更多