Ich möchte eine Zeichenfolge-ID mit einem Join überschreiben, wenn Sie eine Abfrage ausführen. Im Moment verwende ich das Datenbankmodell als Ansichtsmodell, wie Visual Studio automatisiert. Dies ist für meine Verwendung durchaus akzeptabel, aber ich muss den Benutzernamen nicht ihre ID anzeigen. Für einen einzigen Kandidaten habe ich eine so erreicht für die Detailansicht:Join und überschreiben Sie einen Modellwert mithilfe von LINQ
var ret = (from c in db.candidates
where c.candidate_id == id
join u in db.Users on c.createdby equals u.Id
select new { c, u.UserName }
).FirstOrDefault();
candidate theCandidate = ret.c;
theCandidate.createdby = ret.UserName; // Override with the username
Kann ich die theCandidate.createdby = ret.UserName
in der LINQ-Abfrage gemacht?
Oder sollte ich das anders angehen? (es scheint mir, dass die Ansicht den anonymen Typen vorbei zu schaffen ist nicht ideal)
bearbeiten
Oder soll ich ändern, nur das Datenbankmodell implizit die Verbindung haben:
class Candidate
{
...
[ForeignKey("createdby")]
public virtual ApplicationUser CreatedByUser { get; set; }
}
Ja, das habe ich mir ein bisschen gedacht ... und dann habe ich mich gefragt, naja, wenn ich jedes Feld kopieren muss (wo du "offensichtlichen Code" geschrieben hast), ist das nicht genauso schlimm? Ich möchte kein Eins-zu-eins-Mapping für alle Variablen schreiben. Wenn ich ein neues hinzufüge, muss ich dem db-Modell und dem Ansichtsmodell hinzufügen und dann eine Zeile schreiben, um es zu kopieren. – noelicus
Oder ist es gute Form, nur (in diesem Fall) den Kandidaten aus DB-Modell zu kopieren, um Modell zu sehen: 'this.candidate = c' – noelicus
@noelicus aber Sie können Vererbung hier setzen gemeinsame Eigenschaften in Basis-Klassenansicht Modell und erben es und zusätzliche Eigenschaft in kindclassviewmodel, sinnvoll? –