【问题标题】:Filter data from a collection从集合中过滤数据
【发布时间】:2020-03-18 05:04:53
【问题描述】:

我有一个 Parent 类的集合。父类有一个 ID 属性和一些其他类属性。所以,我想根据Parent 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.
        }

    }

}

【问题讨论】:

  • 你想要什么确切输出?
  • 我想要 xyz 属性的“XYZ one”值
  • 我还需要检查这个集合是否有特定的父ID。如果没有,我将返回一个默认值(类似于“0”)...这就是为什么我尝试使用 SingleOrDefault()

标签: c# linq collections


【解决方案1】:

你可以用这个

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

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

或者

var foundItem = d.SingleOrDefault(x => x.Id == 1);

if (foundItem != null && foundItem.MyChild != null)
{ 
  var xyzValueOfParentIdOneValue = foundItem.MyChild.xyz;
}

上面这两个代码完全相似。

【讨论】:

  • 因为问题是使用循环。我认为他需要一个循环来做某事。我改变了它。 @mjwills
【解决方案2】:

我认为您只想访问ParentMyChild 属性,例如:

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

【讨论】:

    【解决方案3】:

    如果父 ID 不存在,您想返回默认值“0”,您可以使用

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

    【讨论】:

    • 感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 2018-10-20
    • 2020-02-12
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 2021-01-18
    相关资源
    最近更新 更多