C#List <t>获取返回排序列表</t>

时间:2010-08-30 23:17:48

标签: c# linq list c#-4.0

我所拥有的基本上是:

public class Object{
    public bool IsObjectValid { set; get; }
}

public class MyThing{
    public List<Object> Objects { set; get; }
}

我想做什么:

public class ObjectsFiltered{
    public List<Object> ValidObjects{
        get{
            var list = LFs.Sort<_LF> where (IsObjectValid == true);
            return list;
        }
    }
}

我知道必须有一种方法来整理List,过滤掉bool true / false。我似乎无法完全绕过Linq。我似乎无法找到一个尖叫“AH HA!”的教程。关于Linq Lambda给我:/

我宁愿只返回一个子集,只保留一个“对象”活着...而不是我当前设置的多组列表。 KISS。

最终我将使用bool-toggles在我的WPF表单上提供TreeViews。

澄清:我认为我的目标是拥有一个列表(列表对象)和一些显示过滤版本的对象的属性。而不是拥有Objects,ObjecstValid,ObjectsInvalid,ObjectsSomeOtherRuleSet ......每个都有不同的List ......

我想让One List对它们进行全部规则...并根据需要提供在列表中返回变体的属性。

3 个答案:

答案 0 :(得分:4)

您可以使用LINQ:

public IEnumerable<Object> ValidObjects{ 
    get{ 
        return LFs.Where(item => item.IsObjectValid)
                  .OrderBy(item => item.SomeProperty); 
    } 
} 

除非您需要 List<T>,否则最好返回IEnumerable<T>,以便您不会将其全部存储在内存中。

lambda表达式item => item.SomeProperty是一个内联函数,它接受一个名为item的参数并返回item.SomeProperty。 (参数和返回类型由编译器推断)

答案 1 :(得分:0)

要过滤您的对象,您可以简单地返回:

return LFs.Where(x => x.IsObjectValid).ToList();

但是,请注意,如果您打算经常使用该功能,可以通过在内部维护预过滤列表来提高性能。

答案 2 :(得分:0)

 LFs.Where(x => x.IsObjectValid).ToList().Sort()

使用默认排序进行排序。否则

 LFs.Where(x => x.IsObjectValid).OrderBy(x => x.PropertyToSortBy).ToList();