2016-07-22 3 views
0

Ich habe keine Probleme Linq Abfrageergebnisse an Ansichten über ein Viewmodel mit oder ohne eine .Select() -Methode zu übergeben, solange ich nur eine einzelne Spalte auswähle. Als ich versuchte, die .Select() Option mit einer umbenannten Spalte wie folgt aus:Hinzufügen der Linq-Methode mit Ergebnissen der Spaltenumbenennung in viewModel

var custodians = _custodian.Contacts 
    .Where(c => !(c.personid.StartsWith("RMR") || c.personid.StartsWith("GMS"))) 
    .Select(c => new { c.contactid, name = c.lname + ", " + c.fname}) 
    .ToList(); 

es schafft schafft eine System.Collections.Generic.List<<>f__AnonymousType1<int, string>> Typenliste

Ich habe eine vorhandene Ansichtsmodell, das ich meiner Meinung nach bin vorbei:

public class AssetViewModel 
{ 
    public string PsgcTagNumber { get; set; } 
    public string[] AssetAttributes { get; set; } 
    public string Message { get; set; } 
    public Asset Asset { get; set; } 
    public Location Location { get; set; } 
    public string Custodian { get; set; } 
    public ?????? AllContacts { get; set; } 
} 

Was ich nicht herausfinden kann, ist der Datentyp, der für die Eigenschaft AllContacts des viewModel verwendet werden soll.

Wer weist mich in die richtige Richtung?

Antwort

0

Sie müssen eine Klasse definieren.

public class Contact { 
    public int contactid {get;set;} 
    public string name {get;set;} 
} 

.Select(c => new Contact { contactid = c.contactid, name = c.lname + ", " + c.fname}) 

public Contact[] AllContacts { get; set; } 

Oder lassen Sie einfach das Unternehmen allein, ohne eine Select Methode auf Ihre Frage zu tun, und verwenden Sie es in Ihrem Viewmodel - Sie eine FormattedName Eigenschaft oder so ähnlich könnte hinzufügen, Ihren Namen zu handhaben.

+0

, dass das Teil, das ich fehlte. Ich hatte die Klasse bereits definiert, ich habe die Auswahl nicht in diese Klasse übertragen. Ich habe versucht, es nach der Auswahl zu übertragen. Vielen Dank –

0

Ihre anonymen Typ Ergebnis ist genau das, was Ihr wählen produziert new { c.contactid, name = c.lname + ", " + c.fname} - eine Liste von int < -> string oder eine Liste von { int contactid, string name } Wenn Sie ein vorhandenes Modell verwenden möchten, wie Ihr AssetViewModel.AllContacts Sie müssen seine Art zuerst definieren wie @ Joe Enos angegeben und dann Ihre Frage ein wenig aktualisieren:

var vm = new AssetViewModel 
{ 
    PsgcTagNumber =..., 
    ..., 
    Custodian =..., 
    AllContacts = _custodian.Contacts 
       .Where(c => !(c.personid.StartsWith("RMR") || c.personid.StartsWith("GMS"))) 
       .Select(c => new Contact { c.contactid, name = c.lname + ", " + c.fname}) 
       .ToList(); 
} 

Also dann haben Sie es: Ihrer Ansicht nach Modell, initiiert und bereit weitergegeben werden vorwärts

Verwandte Themen