我在SQL数据库中有3个表
tblVideos:
VideoID int PK
Title varchar(100)
Decription varchar(100)
Run Code Online (Sandbox Code Playgroud)
tblTags:
TagID int PK
TagText varchar(100)
Run Code Online (Sandbox Code Playgroud)
tblVideosToTags:
VideoID int PK, FK to Videos
TagID int PK, FK to Tags
Run Code Online (Sandbox Code Playgroud)
在Entity Framework(v6-latest-nightly-build)中,我有2个类,Video并且Tag具有多对多关系.我需要帮助构建符合以下条件的LINQ to Entities或LINQ to SQL查询:
来自标签的十大记录,主要用于.所以可能需要一些求和/计数/分组
我有一个简单的实体,我的SQL Sever 2012数据库中有100,000个实体:
public class Entity
{
public int Id { get; set; }
public string Field1 { get; set; }
public string Field2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想在网格中显示这些内容,分页为100,000,太多而无法在一个屏幕上显示(并且效率不高).网格应该允许排序和过滤 - 显然所有这些操作中的3个最好在服务器上完成,EF应该翻译它们.
所以,让我们按字段1排序第二页500:
var items = context.Entities.OrderBy(e => e.Field1).Skip(500).Take(500);
Run Code Online (Sandbox Code Playgroud)
执行此查询时,需要12秒!所以我挖了它,发现它的翻译如下:
SELECT TOP (500) [Extent1].[Id] AS [Id],
[Extent1].[Field1] AS [Field1],
[Extent1].[Field2] AS [Field2]
FROM (SELECT [Extent1].[Id] AS [Id],
[Extent1].[Field1] AS [Field1],
[Extent1].[Field2] AS [Field2],
row_number() OVER (ORDER BY [Extent1].[Field1] ASC) AS [row_number]
FROM [dbo].[Costs] AS [Extent1]) AS [Extent1]
WHERE …Run Code Online (Sandbox Code Playgroud)