2010-01-14 3 views
1

J'ai une déclaration LINQ qui génèrent un type anonyme, par exemple:résultat Réorganiser LINQ (prendre 1 ligne et le déplacer vers le haut) quand un match de l'état

BookID, AuthorID, [Auteurs] ***

Les auteurs renvoient un IEnumerable qui contient également de nombreux auteurs, il dispose de 2 colonnes: AuthorID et AuthorName

Par exemple:

1 | 32 | 12, Auteur 1

 20, Author 3 

    32, Author 19 

Comment puis-je réordonner les auteurs objet de telle sorte que [32, 19 Auteur] est sur le dessus, comme:

1 | 32 | 32, Auteur 19

 12, Author 1 

    20, Author 3 

Merci beaucoup, Kenny.

+0

Merci beaucoup, Alex et Tomas! Travaillez comme prévu. Kenny. – Saxman

Répondre

1

Comme le dit Alex, vous simplement recréer le type anonyme. Pour Geth un auteur spécifique en haut de la liste, vous pouvez utiliser orderby clause (ou OrderBy méthode d'extension), ce que je pense, est un peu plus facile, puis en utilisant Where et Union:

new { 
    ... 
    Authors = from a in record.Authors 
      orderby a.AuthorID == 32 descending 
      select a 
}; 

La seule astuce est que Vous pouvez utiliser la valeur booléenne (AuthorID == 32) comme clé pour la commande. De cette façon, vous obtiendrez d'abord tous les éléments pour lesquels le prédicat renvoie true (celui avec ID = 32), puis toutes les autres valeurs (pour lesquelles le prédicat a renvoyé false).

0

Vous pouvez simplement recréer un objet de type anonyme, car sa propriété readonly ne peut pas être modifiée.

Quelque chose comme ceci:

record = 
    new { 
     record.BookId, 
     record.AuthorId, 
     Authors = 
     record.Authors.Where(author => author.Id==32).Union(
      record.Authors.Where(author => author.Id!=32)) 
    }; 
Questions connexes