我有以下对象
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();
但它给了我一个编译错误。
我该怎么做?
答案 0 :(得分:4)
您必须使用SelectMany
来平展列表:
var ids = lst.SelectMany(x => x.listB.Select(y => y.id)).ToList();
答案 1 :(得分:3)
答案 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();