【问题标题】:select object which matches with my condition using linq使用 linq 选择与我的条件匹配的对象
【发布时间】:2020-10-08 00:14:04
【问题描述】:

我有一个 Person 类型的列表,它有 3 个属性 Id、Name、Age

var per1 = new Person((1, "John", 33);
var per2 = new Person((2, "Anna", 23);

var persons = new List<Person>();
persons.Add(per1);
persons.Add(per2);

使用 linq 我想选择年龄与我的输入匹配的人,例如 33 岁。

我知道如何使用any,但我不知道如何选择符合我条件的对象。

【问题讨论】:

    标签: c# .net linq


    【解决方案1】:

    一场比赛:

    var match = persons.Single(p => your condition);
    

    对于许多匹配项,请使用persons.Where(condition)。还有许多只选择一个人的变体,例如 FirstOrDefault、First、Last、LastOrDefault 和 SingleOrDefault。每个都有略微不同的语义,具体取决于您想要什么。

    【讨论】:

    • +1 single 的唯一问题(或优势)是,当满足查询的对象多于/少于一个时,它会引发错误。如果不确定是否只有一个,请使用First()
    【解决方案2】:

    你可以使用Enumerable.Where,它会返回所有匹配的元素集合。

    var res = persons.Where(c=>c.AttributeName == 23);
    

    如果您想确保只有匹配项,您可以使用单项。

    var res = persons.Single(c=>c.AttributeName == 23);
    

    Single 返回一个序列的唯一元素,如果序列中不完全是一个元素,则抛出异常。

    【讨论】:

      【解决方案3】:

      很简单。

      var per1 = new Person(1, "John", 33);
      var per2 = new Person(2, "Anna", 23);
      var persons = new List<Person>();
      persons.Add(per1);
      persons.Add(per2);
      var sirec = persons.Select(x => x.age = 33);
      

      试试这个,让我知道

      注意:如果是单值,请使用“Single”而不是“Select”

      【讨论】:

      • 不,你试试让我们知道
      【解决方案4】:

      请看这个。

      if (model.Any(i => i.ParamKey == Key))
                          return model.Where(i => i.ParamKey == Key).First().ParamValue;
      

       if (model.Any(i => i.ParamKey == Key))
                              return model.Where(i => i.ParamKey == Key).First();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-30
        • 1970-01-01
        • 2013-11-06
        • 1970-01-01
        相关资源
        最近更新 更多