【问题标题】:Get object from List<object> where property is null and order is the lowest从 List<object> 获取对象,其中属性为 null 且顺序最低
【发布时间】:2015-05-11 04:12:46
【问题描述】:

我有一堂课:

public class Menu
{
    public Menu()
    {

    }

    public string Value { get; set; }
    public int Order { get; set; }
}

然后:

 List<Menu> menus = new List<Menu>() // contains 10 items let's say.

如何从列表中获取 Value == null 和 Order 是项目中最小值的项目?

例子:

菜单项可以有这样的顺序:10, 20, 30, 40, 50 ...

没有相同顺序的商品,每个商品都有唯一的数值。

我有兴趣在 Order 是最小的并且 Value 为空时获取菜单。在这种情况下,Order 为 10 且 Value 为 null 的项目。

【问题讨论】:

    标签: c#


    【解决方案1】:

    为此使用 Linq:

     var result = menus.Where(x => x.Value == null).OrderBy(x => x.Order).FirstOrDefault();
    

    Where 只接受 Value == null 的对象

    OrderBy 按 Order 属性对它们进行排序

    FirstOrDefault 取第一个值,如果没有匹配查询则返回 null

     // This can be written in a shorter form
     var resultWithShorterLinq = menus.OrderBy(x => x.Order).FirstOrDefault(x => x.Value == null);
    

    这两种方法是等效的,因为使用 Linq,您首先使用 Where、OrderBy、OrderByDescending 等方法构建查询...并且仅在您调用以下方法之一时执行它:

    query.ToList();
    query.ToArray();
    query.First();
    query.FirstOrDefault();
    etc...
    

    并且在使用FirstOrDefault时,不要忘记通过检查它是否不为空来检查是否有结果

    if(result != null){
        // The result is found :)
    }
    else {
        // No results :(
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用 LINQ 来实现:

      var menuItem = menus.Where(m => m.Value == null).OrderBy(m=>m.Order).First();
      

      这假定列表中至少有一项。如果没有项目可以使用.FirstOrDefault()

      【讨论】:

        【解决方案3】:

        使用 LINQ 按顺序对列表进行排序,然后获取第一个具有空值的列表

        Menu mn = menus.OrderBy(x => x.Order).FirstOrDefault(m => m.Value == null);
        if(mn != null)
        {
            // Got it
        }
        else
        {
            // No match for your condition
        }
        

        【讨论】:

          猜你喜欢
          • 2020-08-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-24
          • 2022-08-19
          • 2014-05-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多