C# C从列表中的列表中选择属性值

C# C从列表中的列表中选择属性值,c#,list,C#,List,我有以下目标 class A { public List<B> listB { get; set; } } class B { public int id { get; set; } } 但它给了我一个编译错误 我该怎么做呢?您就快到了,请使用SelectMany 检查您的您必须使用SelectMany使列表变平: var ids = lst.SelectMany(x => x.listB.Select(y => y.id)).ToList();

我有以下目标

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

class B 
{
    public int id { get; set; }
}
但它给了我一个编译错误

我该怎么做呢?

您就快到了,请使用SelectMany

检查您的

您必须使用SelectMany使列表变平:

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

这就是我所做的,它工作得非常完美 我所做的只是将这些类公开,并且在初始化列表时,添加新列表,因为即使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; }
}

请尝试忽略重复的id

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

不留下评论就否决投票对任何人都没有帮助,请发表评论。我们总是可以改进答案。问题与课程是否公开或其他任何形式无关。不过,您提到的内容与Hari和我在回答中建议的内容相同,即使用SelectMany而不是Select。这就是解决问题的方法。
var ids = lst.SelectMany(x => x.listB.Select(y => y.id)).ToList();
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; }
}
var ids = lstA.SelectMany(x => x.listB.Select(y => y.id)).Distinct().ToList();