繁体   English   中英

从列表中获取对象 <object> 其中property为null且o​​rder为最低

[英]Get object from List<object> where property is null and order is the lowest

我有一节课:

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且订单是项目中最小值的项目?

例:

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

没有具有相同订单的商品,每个商品都有唯一的数字值。

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

使用Linq:

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

只使用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 :(
}

您可以使用LINQ来实现:

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

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

使用LINQ按顺序排序List,然后获取具有空值的第一个

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM