从双级对象列表中选择一些对象属性的列表

时间:2017-01-05 05:44:16

标签: c# linq

我有一些对象的双级列表。我希望根据某些条件得到一些属性值的列表。

for ex

我有以下课程

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等于&#34; 1&#34;

我想要关注输出 List<string> lstoutput 其中包含

  

&#34; ABC&#34;&#34; MNO&#34;

2 个答案:

答案 0 :(得分:2)

使用SelectMany

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

答案 1 :(得分:2)

最简单的方法是使用LINQ&#39; 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));