我所拥有的基本上是:
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对它们进行全部规则...并根据需要提供在列表中返回变体的属性。
答案 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();