gpt4 book ai didi

c# - Linq-to-entities,一次查询得到结果+行数

转载 作者:行者123 更新时间:2023-11-30 12:32:50 25 4
gpt4 key购买 nike

我看到了很多关于此事的问题,但是它们已经存在 2 年(或更长时间)了,所以我想知道这是否有任何变化。

基本思想是填充 GridView 并创建自定义分页。所以,我还需要结果和行数。

在 SQL 中,这类似于:

SELECT COUNT(id), Id, Name... FROM ... WHERE ...

在一个很好的简单查询中获取所有内容。但是,我想保持一致并使用 Linq2Entities。

到目前为止,我正在使用具有两个查询(针对 sql server)的方法,因为它确实有效。不过,我想优化它并改为使用单个查询。

我已经试过了:

var query = from o in _db.Products
select o;

var prods = from o in query
select new
{
Count = query.Count(),
Products = query
};

这会产生一个非常讨厌和冗长的查询,其中包含真正不必要的交叉连接和其他我真正不需要或不想要的东西。

有没有办法在一个简单的查询中获取分页结果+所有实体的计数?这里推荐的方法是什么?

更新:

刚刚尝试了 FutureQueries,要么我做错了什么,要么它实际上执行了两个查询。这显示了我的 sql 分析器:

-- Query #1

SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[Products] AS [Extent1]
WHERE 1 = [Extent1].[CategoryID]
) AS [GroupBy1];

下一行:

-- Query #1

SELECT
[Extent1].[ID] AS [ID],
[Extent1].[Name] AS [Name],
[Extent1].[Price] AS [Price],
[Extent1].[CategoryID] AS [CategoryID]
FROM [dbo].[Products] AS [Extent1]
WHERE 1 = [Extent1].[CategoryID];

C#代码:

internal static List<Product> GetProducts(out int _count)
{
DatabaseEntities _db = new DatabaseEntities();

var query = from o in _db.Products
where o.CategoryID == 1
select o;

var count = query.FutureCount();

_count = count.Value;
return query.Future().ToList();
}

我错过了什么吗?根据我的探查器,除了在查询中添加的行(-- 查询 #1)之外,它的作用完全相同。

最佳答案

查看 future 查询以在 EntityFramework.Extended 中执行此操作.该链接页面上的第二个示例使用 FutureCount() 来执行您想要的操作。改编于此:

var q = db.Products.Where(p => ...);
var qCount = q.FutureCount();
var qPage = q.Skip((pageNumber-1)*pageSize).Take(pageSize).Future();

int total = qCount.Value; // Both queries are sent to the DB here.
var tasks = qPage.ToList();

关于c# - Linq-to-entities,一次查询得到结果+行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10723439/

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