我有一个通用列表,其中有很多项目。有些项目具有特定的值,例如 true,在这里我需要运行一个 linq 查询,以使基于项目 value=true 的特定项目能够在 var 变量中的这些项目中进行隔离。
我曾尝试使用 List.Find、FindAll、Contains
public class FilterControl
{
public bool IsItem1 { get; set; }
public bool IsItem2 { get; set; }
public bool IsItem3 { get; set; }
public bool IsItem4 { get; set; }
public bool IsItem5 { get; set; }
public bool IsItem6 { get; set; }
public bool IsItem7 { get; set; }
public bool IsItem8 { get; set; }
public bool IsItem9 { get; set; }
public bool IsItem10 { get; set; }
}
List<FilterControl> listFilters = new List<FilterControl>(){
new FilterControl() { IsItem1 = false, IsItem2 = false, IsItem3 = true, IsItem4 = false, IsItem5 = true, IsItem6 = true, IsItem7 = false, IsItem8 = true, IsItem9 = false, IsItem2 = true },
};
我试过如下:
var getAllItemsWchValueTrue = listFilters.Where(a => a.IsItem1 == true).Select(a => a.IsItem1).FirstOrDefault();
但在这段代码中,我只能检查一个值为真或假的项目。我需要在这里检查我想在 Var 变量中拥有的那些项目的值为 true 的项目。
检查这个小提琴https://dotnetfiddle.net/kjvWPC
List<FilterControl> listFilters = new List<FilterControl>(){
new FilterControl() { IsItem1 = false, IsItem2 = false, IsItem3 = true, IsItem4 = false, IsItem5 = true, IsItem6 = true, IsItem7 = false, IsItem8 = true, IsItem9 = false }};
var getAllItemsWchValueTrue = listFilters.Select(p=>
{
List<string> items =new List<string>();
foreach (PropertyInfo prop in p.GetType().GetProperties()){
var type = Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType;
if (type == typeof (System.Boolean) && (bool)prop.GetValue(p, null))
{
items.Add(prop.Name);
}
}
return items;
}).SelectMany(q=> q);
更整洁的方式https://dotnetfiddle.net/6dxa17
var getAllItemsWchValueTrue = listFilters.Select(p =>
{
return p.GetType().GetProperties().Where(prop => (prop.PropertyType == typeof (System.Boolean)) && (bool)prop.GetValue(p, null)).Select(prop => prop.Name);
}
).SelectMany(q => q);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句