C#从列表

时间:2016-05-25 09:47:59

标签: c# list

我有以下对象

class A
{
    public List<B> listB { get; set; }
}

class B 
{
    public int id { get; set; }
}

在我的应用程序中,我有一个类似下面的场景..

public void main()
{    
    var lstA = new List<A>();

    var lstA = new List<A>();

    var a1 = new A();
    a1.listB = new List<B> 
    { 
        new B() { id = 1 },
        new B() { id = 2 }
    };
    lstA.Add(a1);

    a1 = new A();
    a1.listB = new List<B> 
    { 
        new B() { id = 3 },
        new B() { id = 4 }
    };
    lstA.Add(a1);
}

我需要从 lstA

中选择 B 对象的所有ID

这是我到目前为止所尝试的内容

var ids = lst.Select(x=>x.listB.Select(y=>y.id)).ToList();

但它给了我一个编译错误。

我该怎么做?

4 个答案:

答案 0 :(得分:4)

您必须使用SelectMany来平展列表:

var ids = lst.SelectMany(x => x.listB.Select(y => y.id)).ToList();

答案 1 :(得分:3)

你快到了,使用SelectMany

var ids = lst.SelectMany(x=>x.listB.Select(y=>y.id)).ToList();

检查Working Code

答案 2 :(得分:1)

这就是我做了什么,它完美地工作了 我所做的就是将这些类公开,当你初始化List<B>时,你添加new List<B>,因为即使intellisense没有显示任何错误,当你运行应用程序时,你得到的对象没有被引用错误

class Program
{
    static void Main(string[] args)
    {
        var lstA = new List<A>();

        var a1 = new A()
        {
            listB = new List<B>()
            {
                new B
                {
                    id = 3
                },
                new B
                {
                    id = 5
                }
            }
        };
        var a2 = new A()
        {
            listB = new List<B>()
            {
                new B
                {
                    id = 1
                },
                new B
                {
                    id = 8
                }
            }
        };

        lstA.Add(a1);
        lstA.Add(a2);
        var ids = lstA.SelectMany(r => r.listB.Select(x => x.id));
        foreach (var id in ids)
        {
            Console.WriteLine(id);
        }
        Console.ReadKey();

    }
}

public class A
{
    public List<B> listB { get; set; }

}

public class B
{
    public int id { get; set; }
}

答案 3 :(得分:0)

尝试此操作以忽略重复的ID

var ids = lstA.SelectMany(x => x.listB.Select(y => y.id)).Distinct().ToList();