- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下按描述日期排序的行:
var query = this.DbContext.Items.OrderByDescending(g => g.UpdatedAt);
0 Dog 2016-03-08
9 Cat 2016-03-07
2 Elephant 2016-03-06
8 Apple 2016-03-05
3 Banana 2016-03-04
7 Juice 2016-03-03
4 Potato 2016-03-02
5 Cafee 2016-03-01
第一个查询返回数量有限(例如 4)的有序元素:
var result = query.Take(4).ToList();
0 Dog 2016-03-08
9 Cat 2016-03-07
2 Elephant 2016-03-06
8 Apple 2016-03-05
下一个查询应该返回从 ID 3 开始的有限 (4) 个有序元素:
var result = query.ToList()
.SkipWhile(g => g.Id != startFrom.Value)
.Take(limit));
3 Banana 2016-03-04
7 Juice 2016-03-03
4 Potato 2016-03-02
5 Cafee 2016-03-01
问题出在性能上,因为 EF 不支持 SkipWhile
,所以我必须先获取所有数据。
当然我可以通过以下方式剪切所有旧行:
var banana = this.Db.Context.Items.FirstOrDefault(g => g.Id == 3);
var result = query.Where(g => g.CreatedAt < banana.CreatedAt).Take(limit);
是否可以通过单个性能良好的 EF 查询来实现?
最佳答案
两个语句的性能并不总是比一个更复杂的语句差,但您可以这样做:
var result = query.Where(g => g.CreatedAt <
this.DbContext.Items.FirstOrDefault(g2 => g2.Id == 3)
.CreatedAt)
.Take(limit);
事实上,这是我看到的以 SQL 友好方式模仿 SkipWhile
行为的唯一可能性。
如果您对性能非常严格,则应将其与次优(或可能是最佳)选项进行比较:
var createdAt = this.Db.Context.Items
.Where(g => g.Id == 3)
.Select(g => g.CreatedAt)
.FirstOrDefault();
var result = query.Where(g => g.CreatedAt < createdAt).Take(limit);
这只会从数据库中选择一个日期值,而不是完整的 Item
。
关于sql-server - Entity Framework - SkipWhile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36236087/
我有 C# 代码 string fileNameOnly = Path.GetFileNameWithoutExtension(sKey); string token = fileNameOnly.R
我有一个 IEnumerable 值,我需要在开始时跳过某些元素,为此我使用 SkipWhile 。但是,我肯定需要至少一个元素(假设序列甚至包含至少一个元素)。如果所有元素都通过谓词(即跳过所有元素
在 F# 中,我发现什么时候想使用 takeWhile ,我平时也想用skipWhile ,即取满足某个谓词的列表前缀,同时还要记住列表的其余部分,以便后续处理。我不认为有一个标准库函数可以做到这两者
skipWhile 和过滤运算符有什么区别? const source = interval(1000); const example = source.pipe(skipWhile(val => v
在第一个例子中,我的终端输出 next(1) next(2) next(3) next(4) next(5) next(6) next(7) next(8) next(9) next(10) comp
我有点惊讶地发现以下代码的结果,我只是想从一个整数序列中删除所有 3: var sequence = new [] { 1, 1, 2, 3 }; var result = sequence.Skip
我有以下按描述日期排序的行: var query = this.DbContext.Items.OrderByDescending(g => g.UpdatedAt); 0 Dog 201
我有以下用例: 有一项服务可以将具有特定 ID 的计算任务排队。我连接了一个 observable 来查询服务的状态。只要 ID 在队列中,查询就返回 true(尚未计算)。一旦查询为false,则表
我有一个 RekenReeks 类,它返回从 2 开始乘以 2 的数字。所以 {2,4,8,16,32,64} 现在我了解了 TakeWhile 和 SkipWhile 方法以及 LINQ。 所以我创
我有一个项目列表: List ItemList = new List; 有时列表只是部分填满或某些索引未被占用,因此当我使用 foreach 遍历列表时,它会给出错误,因为该项目为空。我想将该列表缩减
我正在尝试练习下面的示例,但是 SkipWhile() 操作得到了奇怪的输出,它没有显示预期的输出。有人能解释一下为什么吗? List emp = new List();
我看到了一些我很难理解的行为。给定一个 DateTime 列表,我只想按降序选择去年发生的日期。但是使用 OrderBy()、OrderByDescending() 和 SkipWhile() 的行为
我真的很喜欢 RxJava,它是一个很棒的工具,但有时很难理解它是如何工作的。我们在我们的 Android 项目中使用带有 RxJava 的 Retrofit,并且有以下用例: 我需要轮询服务器,重试
我需要按发布日期降序排列存储在数据库中的文章,然后使用 Id == 100 获取文章之后的前 20 条记录。 这就是我想用 Linq 做的事情: IQueryable articles = d
我找不到为什么会发生以下异常。非常感谢任何帮助。 // EdcsEntities is derived from System.Data.Objects.ObjectContext EdcsEntit
是否有任何特殊原因需要单独的方法 Skip和 SkipWhile ,而不是简单地重载相同的方法? 我的意思是,而不是Skip(int) , SkipWhile(Func) , 和 SkipWhile(
我是一名优秀的程序员,十分优秀!