Jer*_*ter 40
这是我目前最好的方法:
MyList.SkipWhile(item => item.Name != "someName").Skip(1).FirstOrDefault()
Run Code Online (Sandbox Code Playgroud)
较早的答案使用Skip(1).Take(1)哪个有效,但返回一个结果的列表.在我的情况下(也许是OP的情况),我们正在寻找实际的项目.所以我的代码跳过它直到它到达我们正在寻找的那个(一个Where会返回一个子集,所以我们将无法访问下一个项目)然后再跳过一个然后获取该项目.
EMP*_*EMP 15
由于您有一个List<T>对象,您可以使用其FindIndex方法而不是Where获取第一个匹配项的索引而不是项本身:
int index = recommendations.FindIndex(rp =>
rp.Products.Any(p => p.Product.Code == "A")
&& rp.Products.Any(p => p.Product.Code == "B")
);
Run Code Online (Sandbox Code Playgroud)
获得索引后,您可以获得下一个项目或上一个项目或任何您想要的项目.
这样的事情怎么样:
public static class Extension
{
public static T Next<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
bool flag = false;
using (var enumerator = source.GetEnumerator())
{
while (enumerator.MoveNext())
{
if (flag) return enumerator.Current;
if(predicate(enumerator.Current))
{
flag = true;
}
}
}
return default(T);
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像对待Where一样调用它
Products.Next(x => x.Whatever);
Run Code Online (Sandbox Code Playgroud)
试试这个吧
下一个项目
MyList.SkipWhile(x => x != value).Skip(1).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
上一篇项目说明:Reverse()不适用于LINQ to SQL
var MyList2 = MyList.ToList();
MyList2.Reverse();
MyList2.SkipWhile(x => x != value).Skip(1).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25356 次 |
| 最近记录: |