c# – 是否可以忽略linq的skip方法中的项目,然后在列表中应用skip而不会从列表中丢失该项目
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 是否可以忽略linq的skip方法中的项目,然后在列表中应用skip而不会从列表中丢失该项目,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1696字,纯文字阅读大概需要3分钟。
内容图文
我想在数据列表上实现分页.该列表中有一些假的项目作为标记项目,对数据进行一些特定的工作.我所做的简化版如下:
List<Model> list = MyService.MyServiceMethod(MySearchModel);
pagedData = list.Skip((page - 1) * pageSize).Take(pageSize);
但这种方式的问题是假物品将在Skip and Take方法中计算.
是否可以忽略Skip方法中的假项目然后将Skip应用于列表但通过Take方法中的某些更改包含假项目或类似的东西
编辑:第一个列表在分页之前订购,假邮件也在有序位置.您应该知道列表的顺序对我来说很重要.
解决方法:
说实话,我不喜欢你在做什么.我会考虑将来更好地建模您的数据.但是,这里有几种扩展方法可以完成工作……
(我基本上修改了Skip和Take的原始实现,从https://github.com/Microsoft/referencesource/blob/master/System.Core/System/Linq/Enumerable.cs开始)
public static IEnumerable<TSource> SkipAndInclude<TSource>(this IEnumerable<TSource> source, int count, Func<TSource, bool> predicate)
{
if (source == null) throw new ArgumentNullException(nameof(source));
if (predicate == null) throw new ArgumentNullException(nameof(predicate));
using (IEnumerator<TSource> e = source.GetEnumerator())
{
while (count > 0 && e.MoveNext())
{
if (!predicate(e.Current)) count--;
}
if (count <= 0)
{
while (e.MoveNext()) yield return e.Current;
}
}
}
public static IEnumerable<TSource> TakeAndInclude<TSource>(this IEnumerable<TSource> source, int count, Func<TSource, bool> predicate)
{
if (source == null) throw new ArgumentNullException(nameof(source));
if (predicate == null) throw new ArgumentNullException(nameof(predicate));
if (count > 0)
{
foreach (TSource element in source)
{
yield return element;
if (!predicate(element)) count--;
if (count == 0) break;
}
}
}
用法…
pagedData = list.SkipAndInclude((page - 1) * pageSize, x => x.Fake).TakeAndInclude(pageSize, x => x.Fake);
内容总结
以上是互联网集市为您收集整理的c# – 是否可以忽略linq的skip方法中的项目,然后在列表中应用skip而不会从列表中丢失该项目全部内容,希望文章能够帮你解决c# – 是否可以忽略linq的skip方法中的项目,然后在列表中应用skip而不会从列表中丢失该项目所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。