2010-06-28 7 views
1

J'ai du code qui regroupe une table par "Value1" et certaines boucles qui ajoutent la rangée supérieure de chaque groupe à une liste. C'est une façon assez moche de le faire, et je me demandais si je pouvais remplacer l'une des boucles foreach par quelques lignes supplémentaires dans ma requête LINQ? Le problème est, je n'ai pas l'idée la plus brumeuse comment faire ceci.Obtention uniquement de la première ligne de chaque groupe

var Result = 
from a in DB.Table1 
group new {Values = a} by a.Value1 into c 
select new {everything = c}; 

foreach (var Row in Result) 
{ 
    foreach (var RowAll in Row.Everything) 
     { 
     List.Add(new List<string>() {RowAll.Value1, RowAll.Value2}) 
     break; 
    } 
} 

Répondre

1

Utilisation Enumerable.First:

var List = 
    (from Row in Result 
    let RowAll = row.Everything.First() 
    select new List<string>() {RowAll.Value1, RowAll.Value2} 
    ).ToList(); 

Ou, combinée à votre requête originale:

var List = 
    (from a in DB.Table1 
    group a by a.Value1 into c 
    select new List<string>() {c.Key, c.First().Value2} 
    ).ToList(); 
0

Utilisation FirstOrDefault:

var query = from row in result 
      let rowAll = row.Everything.FirstOrDefault() 
      where rowAll != null 
      select new List<string> {rowAll.Value1, rowAll.Value2}; 

var list = query.ToList(); 

vous Relire première requête que je réalise que vous êtes gr ouping sur une propriété de 'a' donc il ne devrait pas y avoir de regroupements vides. First() devrait être sûr comme dans l'exemple d'autres affiches.

Questions connexes