C# 第一次出现后,如何选择列表中的所有内容?
我有一个集合,其中每个元素都有一个名为IsTop的属性。我想做的是使用linq(如果可能的话)在第一次出现IsTop==true之后选择所有内容。现在,我这样做:C# 第一次出现后,如何选择列表中的所有内容?,c#,linq,C#,Linq,我有一个集合,其中每个元素都有一个名为IsTop的属性。我想做的是使用linq(如果可能的话)在第一次出现IsTop==true之后选择所有内容。现在,我这样做: bool[] foundTop = {false}; // use array for modified closure foreach (var config in fullHierarchy .Where(config => config.IsTop || foundTop[0])) { foundTop[0
bool[] foundTop = {false}; // use array for modified closure
foreach (var config in fullHierarchy
.Where(config => config.IsTop || foundTop[0]))
{
foundTop[0] = true;
configurationHierarchy.Add(config);
}
var afterTop = fullHierarchy.SkipWhile(x => !x.IsTop).Skip(1);
我觉得这有点做作。在LINQ中有没有更简单的方法来实现这一点?您可以使用以下方法:
bool[] foundTop = {false}; // use array for modified closure
foreach (var config in fullHierarchy
.Where(config => config.IsTop || foundTop[0]))
{
foundTop[0] = true;
configurationHierarchy.Add(config);
}
var afterTop = fullHierarchy.SkipWhile(x => !x.IsTop).Skip(1);
SkipWhile
跳过所有元素,直到在IsTop==true
中找到第一项,然后跳过该元素。结果将是fullHierarchy
中的所有项目,位于第一个项目之后,其中IsTop==true
请尝试以下操作:
var result = fullHierarchy.SkipWhile(x=>!x.IsTop).Skip(1);
我想这就是你要找的
var myArray = new[]
{
new { IsTop = false, S = 'a' },
new { IsTop = true, S = 'b' },
new { IsTop = false, S = 'c' },
};
myArray.SkipWhile(x => !x.IsTop); // contains the elements with 'b' and 'c'
// in your code, might be
foreach (var config in fullHierarchy.SkipWhile(x => !x.IsTop))
{
configurationHierarchy.Add(config);
}
您的意思是在第一次出现top之后,那么如何确定集合中的排序呢?排序是在数据源中处理的,因为它是从数据库中读取的。