Lambda Expression用条件搜索并仅返回1个最新结果

时间:2013-02-26 01:58:27

标签: c# .net linq lambda

我有一个包含Supplier数据的列表,我想使用SupplierID非活跃供应商搜索它,只有1个最新结果。

所以我得到了:

List<Supplier> filteredList = this.toList();    
filteredList.OrderByDescending(m => m.ModifiedDatetime).FirstOrDefault();    
filteredList.Where(f => (f.Active == false && f.FieldId == SupplierFieldID))
            .ToList<Supplier>();

但我无法做到这一点;请帮忙。

2 个答案:

答案 0 :(得分:4)

您需要链接LINQ表达式,如下所示:

var filteredList = unfilteredData
    .Where(f => f.Active == false && f.FieldId == SupplierFieldID)
    .OrderByDescending(m => m.ModifiedDatetime)
    .FirstOrDefault();

您不需要ToList(),因为您需要单个项目,而不是列表;这就是FirstOrDefault()的作用。如果您需要最后一项,则需要按照原始订购条件的相反顺序进行订购。例如,如果您希望条目具有最新修改日期,则需要按降序排序(如您所做)。

答案 1 :(得分:1)

您可以在一个语句中执行此操作,将LINQ运算符链接在一起:

var filteredList = myList.Where(f => f.Active == false && f.FieldId == SupplierFieldID)
                         .OrderByDescending(m => m.ModifiedDatetime)
                         .Take(1);

或@Preston Guillot建议,更短的形式:

var filteredList = unfilteredData
            .OrderByDescending(m => m.ModifiedDatetime)
            .FirstOrDefault(f => f.Active == false && f.FieldId == SupplierFieldID);