gpt4 book ai didi

c# - 在 Entity Framework 4.1 中查询数据页面并获取总数的更好方法?

转载 作者:行者123 更新时间:2023-12-05 08:02:02 24 4
gpt4 key购买 nike

目前,当我需要运行将使用分页的查询时,我会这样做:

//Setup query (Typically much more complex)
var q = ctx.People.Where(p=>p.Name.StartsWith("A"));

//Get total result count prior to sorting
int total = q.Count();

//Apply sort to query
q = q.OrderBy(p => p.Name);

q.Select(p => new PersonResult
{
Name = p.Name
}.Skip(skipRows).Take(pageSize).ToArray();

这行得通,但我想知道是否有可能在仍然使用 linq 的同时改进它以提高效率?我想不出一种方法,可以将计数和数据检索结合到一次不使用存储过程的数据库访问中。

最佳答案

下面的查询将一次访问数据库就得到计数和页面结果,但是如果你检查 LINQPad 中的 SQL,你会发现它不是很漂亮。我只能想象更复杂的查询会是什么样子。

var query = ctx.People.Where (p => p.Name.StartsWith("A"));

var page = query.OrderBy (p => p.Name)
.Select (p => new PersonResult { Name = p.Name } )
.Skip(skipRows).Take(pageSize)
.GroupBy (p => new { Total = query.Count() })
.First();

int total = page.Key.Total;
var people = page.Select(p => p);

对于像这样的简单查询,您可以使用任一方法(2 次访问数据库,或使用 GroupBy 在 1 次访问中完成)并且不会注意到太大差异。对于任何复杂的事情,我认为存储过程将是最好的解决方案。

关于c# - 在 Entity Framework 4.1 中查询数据页面并获取总数的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10884483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com