我有FirstLevelItem
的列表。每个项目都有一个SecondLevelItem
s列表。
public class FirstLevelItem {
public List<SecondLevelItem> SecondLevelItems { get; set; }
}
public class SecondLevelItem{
public bool Deleted {get; set;}
}
我想返回已删除的所有FirstLevelItem
和过滤SecondLevelItem
。
答案 0 :(得分:3)
我知道您有一个本地集合,并且您希望过滤未从每个元素中删除的项目。在这种情况下,您可以使用:
items.ForEach( item =>
item.SecondLevelItems = item.SecondLevelItems.Where(s => !s.Deleted).ToList() );
或者,如果您正在谈论数据库,您可以这样做:
var results = DataContext.FirstLevelItems.Select( fi => new {
FirstLevelItem = fi,
SecondLevelItems = fi.SecondLevelItems.Where( si => !si.Deleted )
} );
这将返回元组,其中FirstLevelItem
属性是第一级项目本身,SecondLevelItems
属性是二级项目的过滤列表。但是,请确保直接访问SecondLevelItems
属性,而不是FirstLevelItem.SecondLevelItems
属性,因为懒惰地评估和查询数据库中的所有二级项目。
有趣的是,每个人都不同地理解这个问题:-)。
答案 1 :(得分:0)
返回包含至少一个已删除的FirstLevelItem
的所有SecondLevelItem
:
var result = DbContext.FirstLevelItems
.Where(fl => fl.SecondLevelItems.Any(sl => sl.Deleted));
Any
子句检查集合中至少一个项的布尔条件是否为真。
答案 2 :(得分:0)
假设您有list
类型的变量List<FirstLevelItem>
。
list = list.Select(listItem =>
{
listItem.SecondLevelItems = listItem
.SecondLevelItems
.Where(secondLevelItem => secondLevelItem.Deleted)
.ToList();
return listItem;
}).ToList();
答案 3 :(得分:0)
此代码可能会帮助您
var fli = //get your FirstLevelItems
var result= fli.SecondLevelItems.Where(x => x.Deleted);