2010-07-21 4 views
0

Je suis sur la meilleure façon de présenter certaines données générées dynamiquement à partir de deux tables différentes.Requête pivot de liaison à afficher dans ASP.Net MVC

Compte tenu de ma requête:

var assets = assetRepo.Find(x => x.LoginId == User.Identity.Name); 
    var accounts = repository.Find(x => x.AccStatus == "A" && x.LoginId == User.Identity.Name); 

    var query = from asst in assets 
       join acct in accounts on asst.AccountId equals acct.AccountId 
       select new 
       { 
        Account = acct.AccountNumber, 
        Status = acct.AccStatus, 
        Make = asst.Make, 
        Model = asst.Model, 
        Submodel = asst.SubModel, 
        Registration = asst.Registration, 
        Balance = acct.BalanceOutstanding, 
        NextPayment = acct.NextPayment, 
        Date = String.Format("{0:dd MMM yyyy}", acct.NextPaymentDate), 
        Due = acct.ArrearsBal 
       }; 

Quel serait le meilleur (à savoir plus propre) façon de lier cela à la vue? Une classe personnalisée est-elle requise ou existe-t-il un moyen de spécifier et d'itérer sur une collection de types anonymes?

Répondre

1

La création d'une classe personnalisée peut vous apporter des avantages supplémentaires. Vous pouvez utiliser DisplayAttribute pour définir les en-têtes et l'ordre des colonnes. Ensuite, vous pouvez créer une vue (ou un modèle à utiliser avec DisplayFor) qui prend la liste des objets de tout type et utilise la réflexion pour lire les annotations et afficher la vue bien.

class Report { 
    [Display(Name="Account",Order=1)] 
    public string Account {get; set;} 

    [Display(Name="Next payment",Order=2)] 
    public Date NextPayment {get; set;} 
} 

Il semble également propre. Vous serez en mesure d'utiliser ces annotations non seulement pour la grille, mais aussi pour les exportations Excel ou d'autres opérations de données.