2011-08-31 123 views
4

How do I add ROW_NUMBER to a LINQ query or Entity?VB.NET - LINQ to SQL - 如何将Row_Number添加到VB.NET中的LINQ to SQL查询中?

如何将此解决方案转换为VB.NET?

var start = page * rowsPerPage; 
Products.OrderByDescending(u => u.Sales.Count()) 
    .Skip(start) 
    .Take(rowsPerPage) 
    .AsEnumerable() 
    .Select((u, index) => new { Product = u, Index = index + start }); // this line gets me 

我无法移植最后一行。我一直无法找到一个VB.NET的例子。

我实际上并没有寻找任何分页功能,如示例提供的,只是很好的老式Row_Number(Order By X)行索引。

+0

什么是OrderByDescending(U => u.Sales.Count的目的( ))在这个例子中?由于计数在查询过程中没有变化,因此除了旋转周期之外,这实际上不会做任何事情(假定SQL没有将其优化到执行计划之外)。 –

+0

我不知道。这是另一个Stackoverflow帖子的代码片段。我有兴趣将行索引投影到VB.NET中的anon对象列表中 –

+0

在这种情况下,请在下面提到的Select David B中使用重载。 –

回答

6

LinqToSql无法在数据库中执行Row_Number(Order By X)。

您发布的C#代码调用Enumerable.Select

msdn page为Enumerable.Select做它针对内存的情况下,有一个vb.net的例子。


这里是一个工作示例,演示了行索引的VB.NET中的投影:

Dim R = (
    From P In DB.Products Select P 
).AsEnumerable().Select(
    Function(Product, index) New With {index, Product} 
) 

Response.Write(R(12).Product.Doc_width.ToString()) 'Access object members 
Response.Write(R(12).index.ToString() 'Access Row Index