2009-07-15 34 views

Trả lời

12

Không có cách nào trực tiếp để làm điều này mà tôi biết của. Bạn sẽ phải kéo toàn bộ truy vấn xuống máy khách, và từ đó bạn có thể chiếu các số hàng. Thay vào đó, bạn có thể viết một thủ tục được lưu trữ sử dụng ROW_NUMBER và sau đó nhấn proc đó từ LINQ to SQL.

Trong trường hợp của bạn, cách duy nhất bạn có thể thực hiện điều này sẽ là phía khách hàng. Hãy nhớ rằng tuyên bố sau đây sẽ KHÔNG làm điều này tại máy chủ, nhưng sẽ kéo toàn bộ bảng của bạn xuống và lấy chỉ mục tại máy khách ...

using (var dc = new DataClasses1DataContext()) 
{ 
    var result = dc.Users 
     .AsEnumerable()  // select all users from the database and bring them back to the client 
     .Select((user, index) => new // project in the index 
     { 
      user.Username, 
      index 
     }) 
     .Where(user => user.Username == "sivey"); // filter for your specific record 

    foreach (var item in result) 
    { 
     Console.WriteLine(string.Format("{0}:{1}", item.index, item.Username)); 
    } 
} 
+0

Cảm ơn, Scott. Vì vậy, tôi đoán bạn sẽ ToList() nó, và sau đó IndexOf()? –

+0

chắc chắn, tôi cũng đã thêm một ví dụ về cách bạn có thể làm điều đó với sự quá tải của Chọn cung cấp cho bạn một chỉ mục. –

+0

Ngọt ngào. Được upvote của tôi. –

3

Bạn sẽ có thể sử dụng các phương thức Bỏ qua và Mở rộng để thực hiện việc này.

Ví dụ, nếu bạn muốn chèo 10:

from c in customers 
      where c.Region == "somewhere" 
      orderby c.CustomerName 
      select new {c.CustomerID, c.CustomerName} 
      .Skip(9).Take(1); 
+3

Tôi không nghĩ đây là câu trả lời cho câu hỏi đang được hỏi, nhưng nó đã được upvoted, vì vậy tôi để nó ở đây. –

Các vấn đề liên quan