C# 选择多个具有相同类型的2个字段

C# 选择多个具有相同类型的2个字段,c#,sql,lambda,C#,Sql,Lambda,(如果标题有误导性,很抱歉。请随意编辑。) 直接举个例子: public class A { public ObservableCollection<B> Bs; public List<D> getSelectedDs() { return [Fill in this blank]; } } public class B { public C FirstC; public C SecondC; } p

(如果标题有误导性,很抱歉。请随意编辑。)

直接举个例子:

public class A
{
    public ObservableCollection<B> Bs;

    public List<D> getSelectedDs()
    {
        return [Fill in this blank];
    }
}

public class B
{
    public C FirstC;
    public C SecondC;
}

public class C
{
    public ObservableCollection<D> Ds;
}

public class D
{
    public bool IsSelected;
}
另外,我想用一个lambda句子(如果用两个句子我就可以做到)

我应该在
[同时获得FirstC和SecondC]
中写什么? 谢谢。

公共列表getSelectedDs()
public List<D> getSelectedDs()
{
     return Bs.SelectMany(b => b.FirstC.Ds.Union(b.SecondC.Ds))
              .Where(x => x.IsSelected).ToList();
}
{ 返回Bs.SelectMany(b=>b.FirstC.Ds.Union(b.SecondC.Ds)) .Where(x=>x.IsSelected).ToList(); }
请注意,
Union
是一个集合操作,将忽略相同的对象
new[]{1,1,1}。联合(new[]{1,2,3})
将返回
1,2,3
。可能是所需的行为。否则,使用
.Concat(…)
连接并简单地迭代两个集合。是的,你们都是对的。要使用
Union
Contact
是@Mosess上的depand
public List<D> getSelectedDs()
{
     return Bs.SelectMany(b => b.FirstC.Ds.Union(b.SecondC.Ds))
              .Where(x => x.IsSelected).ToList();
}