2009-07-15 6 views

Répondre

12

Il n'y a aucun moyen direct de faire ce que je sache de. Vous devez envoyer l'ensemble de la requête au client, et à partir de là vous pouvez projeter dans les numéros de ligne. Comme alternative, vous pouvez écrire une procédure stockée qui utilise ROW_NUMBER, puis frapper ce proc de Linq à SQL.

Dans votre cas, la seule façon de le faire serait le côté client. Gardez à l'esprit que la déclaration suivante ne va pas faire cela sur le serveur, mais va abattre toute votre table et obtenir l'index chez le client ...

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

Merci, Scott. Donc je suppose que vous le souhaitez ToList(), puis IndexOf()? –

+0

sûr, j'ai aussi ajouté un exemple de la façon dont vous pourriez le faire avec la surcharge de Select qui vous donne un index. –

+0

Sweet. Obtient mon upvote. –

3

Vous devriez pouvoir utiliser les méthodes d'extension Skip and Take pour accomplir ceci.

Par exemple, si vous voulez la ligne 10:

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

Je ne pense pas que ce soit la réponse à la question qui est posée, mais elle a été mise à jour, donc je la laisse ici. –

Questions connexes