Groupe Par de Multiples Colonne Dans LINQ en C#
J'ai une classe comme suit:
public class ActualClass
{
public string BookName { get; set; }
public string IssuerName { get; set; }
public DateTime DateOfIssue { get; set; }
public bool Status { get; set; }
}
Il a données suivantes dans la table:
Je voudrais les regrouper par IssuerName et DateOfIssue pour la suite de la classe viewModel:
public class ViewModel
{
public string IssuerName { get; set; }
public DateTime DateOfIssue { get; set; }
public List<string> Books { get; set; }
}
Et les données seront affichées comme suit: (Capture d'écran des données sera remplacé par le tableau précédent de données après le succès de regroupement)
Une attention particulière: Est-il quelque chose de mal dans mon ViewModel en fonction de mes attentes?
J'ai essayé beaucoup après quelques stackoverflow réponses, mais aucune n'a fonctionné pour moi. Toute aide sera très appréciée.
Le code que j'ai essayé:
var viewmodel = from b in db.BookIssues
group b by new
{
b.IssuerName,
b.DateOfIssue
}
into g
select new ViewModel()
{
Name = g.key.IssuerName,
DateOfIssue = g.Key.DateOfIssue,
Books = g.ToList() //Actually this line of code is not working
};
OriginalL'auteur TanvirArjel | 2016-11-23
Vous devez vous connecter pour publier un commentaire.
Probablement parce que Livres propriété est de type de
List<string>
, pasList<ActualClass>
.Pouvez-vous s'il vous plaît essayer cette requête, j'ai ajouté
b.Select(bn => bn.BookName).ToList()
pour extraire uniquement les noms des livres:Je regroupées par:
x.IssuerName, x.DateOfIssue
. Je l'ai fait par le passage d'un type anonyme dansGroupBy()
avec la manière suivante:x => new { x.IssuerName, x.DateOfIssue }
.Maintenant, ils sont dans la clé et vous pouvez accéder à IssuerName et DateOfIssue de CLÉ dans l'instruction SELECT, comme dans les suivants:
b.Key.IssuerName
etb.Key.DateOfIssue
.OriginalL'auteur kat1330
si vous avez besoin de sélectionner une liste de livres de résultat du groupe, vous avez besoin
Books = v.Select(c=>c.BookName).ToList()
aussi noter que dans le cas de vous avez le temps, dans la date d'émission de fois, vous avez besoin de groupe que de la date de la pièce à l'aide d'EntityFunctions.TruncateTime
fonction. si vous ne le stockage de date alors seulement, vous pouvez ignorer cette fonction.OriginalL'auteur Damith