使用LINQ获取每第n行我们在SQL数据库中有一个表,其中包含创建图表所需的历史原始数据。我们通过EntityFramework和LINQ访问数据库。对于较小的日期时间间隔,我可以简单地读取数据并生成图表:varmydata=entity.DataLogSet.Where(dt=>dt.DateTime>dateLimit);但我们想实现一个功能,您可以从图表中快速“缩小”以包括更大的日期间隔(过去5天、上个月、过去6个月、过去10年等)。我们不想为此绘制每个数据点。我们想使用数据样本,我的意思是这样的——数据点的数量和图表名称只是示例。我需要的是一种从数据库中只选择“第n行”的方法。您可以使用包含枚举项索引的Select重载。像这样的东西应该可以解决问题-vardata=myDataLogEnumeration.Select((dt,i)=>new{DataLog=dt,Index=i})。其中(x=>x.Index%nth==0)。选择(x=>x.DataLog);如果你需要用WhereBy限制查询或者用OrderBy排序,你必须在第一次select之前这样做,否则索引将全部错误–vardata=myDataLogEnumeration.Where(dt=>dt.DateTime>dateLimit).OrderBy(dt=>dt.SomeField).Select((dt,i)=>new{DataLog=dt,Index=i}).Where(x=>x.Index%nth==0).Select(x=>x.数据日志);不幸的是,正如juharr评论的那样,实体框架不支持这种重载。解决这个问题的一种方法是做这样的事情-vardata=entity.DataLogSet.Where(dt=>dt.DateTime>dateLimit).OrderBy(dt=>dt.SomeField).ToArray().Select((dt,i)=>new{DataLog=dt,Index=i}).Where(x=>x.Index%nth==0).Select(x=>x.DataLog);注意ToArray()的添加。这并不理想,因为它会在仅选择每第n行之前强制加载与初始查询匹配的所有数据。以上就是C#学习教程:用LINQ获取每n行分享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
