wal*_*her 5 c# sql linq-to-entities
我已经看到了有关此事的多个问题,但它们已经有 2 年(或更长)的历史了,所以我想知道这方面是否有任何变化。
基本思想是填充网格视图并创建自定义分页。所以,我还需要结果和行数。
在 SQL 中,这将类似于:
SELECT COUNT(id), Id, Name... FROM ... WHERE ...
Run Code Online (Sandbox Code Playgroud)
通过一个简单的查询获取所有内容。但是,我希望保持一致并使用 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
};
Run Code Online (Sandbox Code Playgroud)
这会产生一个非常令人讨厌且漫长的查询,其中包含真正不必要的交叉联接和其他我真正不需要或不想要的东西。
有没有一种方法可以在一个简单的查询中获取分页结果+所有实体的计数?这里推荐的方法是什么?
更新:
刚刚尝试了 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];
Run Code Online (Sandbox Code Playgroud)
下一行:
-- 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];
Run Code Online (Sandbox Code Playgroud)
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();
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?根据我的探查器,除了在查询中添加行(--查询#1)之外,它的作用完全相同。
查看未来查询以在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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6692 次 |
| 最近记录: |