C# 从集合中筛选数据

C# 从集合中筛选数据,c#,linq,collections,C#,Linq,Collections,我有一个父类的集合。父类有一个ID属性和一些其他类属性。因此,我希望根据父ID获取这些子属性值。我能够获取集合的一项,但我需要该项的单个值。下面是我的代码: public class Parent { public int Id { get; set; } public Child MyChild { get; set; } } public class Child { public string abc { get; set; } public string

我有一个父类的集合。父类有一个ID属性和一些其他类属性。因此,我希望根据
父ID
获取这些子属性值。我能够获取集合的一项,但我需要该项的单个值。下面是我的代码:

public class Parent
{
    public int Id { get; set; }
    public Child MyChild { get; set; }

}

public class Child
{
    public string abc { get; set; }
    public string xyz { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        var d = new List<Parent>();
        d.Add(new Parent
        {
            Id = 1,
            MyChild = new Child()
            {
                xyz = "XYZ one",
                abc = "ABC one"
            }
        });

        d.Add(new Parent
        {
            Id = 2,
            MyChild = new Child()
            {
                xyz = "XYZ two",
                abc = "ABC two"
            }
        });

        for (int i = 1; i < 2; i++)
        {
            var xyzValueOfParentIdOneValue = d.SingleOrDefault(x => x.Id = 1) // Here, I want to get XYZ property value of Parent ID 1.
        }

    }

}
公共类父类
{
公共int Id{get;set;}
公共子MyChild{get;set;}
}
公营儿童
{
公共字符串abc{get;set;}
公共字符串xyz{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
var d=新列表();
d、 添加(新的父项)
{
Id=1,
MyChild=新的子对象()
{
xyz=“xyz-one”,
abc=“abc一号”
}
});
d、 添加(新的父项)
{
Id=2,
MyChild=新的子对象()
{
xyz=“xyz-two”,
abc=“abc二”
}
});
对于(int i=1;i<2;i++)
{
var xyzvalueofparentionevalue=d.SingleOrDefault(x=>x.Id=1)//这里,我想获取父Id 1的XYZ属性值。
}
}
}

我想您只想访问
父对象的
MyChild
属性,比如:

        var parent = d.SingleOrDefault(x => x.Id == 1);
        var xyz = parent.MyChild.xyz;
你可以用这个

var xyzValueOfParentIdOneValue = d.SingleOrDefault(x => x.Id == 1)
                                       ?.MyChild
                                       ?.xyz;

if (xyzValueOfParentIdOneValue != null)
{
   ......
}


上述两个代码完全相似。

因为如果父Id不存在,您希望返回默认值“0”,所以可以使用

var xyzValueOfParentIdOneValue = d.SingleOrDefault(x => x.Id == idToSearch)?
                                  .MyChild?
                                  .xyz ?? "0";

您想要什么确切的输出?我想要XYZ属性的“XYZ one”值。我还需要检查此集合是否具有特定的父id。如果不是,我将返回一个默认值(类似于“0”)……这就是为什么我尝试使用SingleOrDefault(),因为问题是循环使用的。我想他需要一个循环来做点什么。我改了@谢谢你的回复。
var xyzValueOfParentIdOneValue = d.SingleOrDefault(x => x.Id == idToSearch)?
                                  .MyChild?
                                  .xyz ?? "0";