Best-Case-Szenario (wenn Sie Notwendigkeit die Metadaten):
var rows = db.tblExample // database context
.OrderBy(x => x.SNo) // set an orderby
.AsEnumerable() // force query execution (now we have local dataset)
.Select(x => new
{
rowindex = i,
SNo = x.Sno,
Name = x.Name,
Age = x.Age
}); // now you have your original query
Der einzige Nachteil hier ist, dass der gesamte Datensatz sein muss gezogen, um diese Metadaten zu erhalten. Wenn Sie jedoch .Skip
& .Take
verwenden, übersetzt LINQ diese automatisch in eine Ordnerstruktur für Sie (Sie können diese Metadaten später nicht mehr verwenden). z.B.
var pageIndex = /* ??? */;
var rows = db.tblExample
.OrderBy(x => x.SNo)
.Skip(pageIndex * 10).Take(10);
, die man so etwas geben sollte: So, jetzt
SELECT [t1].[SNo] AS [SNo],
[t1].[Name] AS [Name],
[t1].[Age] AS [Age]
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY [t0].[tblExample], [t0].[SNo]) AS [ROW_NUMBER],
[t0].[SNo],
[t0].[Name],
[t0].Age]
FROM [tblExample] AS [t0]
) AS [t1]
WHERE [t1].[ROW_NUMBER] BETWEEN @p0 + 1 AND @p0 + @p1
ORDER BY [t1].[ROW_NUMBER]
die row_number
innerhalb SQL intern verwendet wird, aber Sie sind nicht in der Lage den Zugriff auf sie innerhalb des Codes zu erhalten.
Wenn Sie diese Art von Zugriff wirklich möchten, ist es möglicherweise besser, die Abfrage manuell an den Server zu senden. Eine Lib, die gut mit dieser Art von Sache funktioniert, ist dapper-dot-net, die in etwa wie folgt aussehen würde:
LINQ to SQL? LINQ zu EF? –
Ohne die gesamte Menge zu ziehen und möglicherweise eine Variable oder den überladenen '.Select'-Operator zu verwenden, glaube ich nicht, dass es einen LINQ-Befehl gibt, der diese Abfrage übersetzt. –