Linq one to many Einsatz, wenn viele bereits vorhanden
Frage
Also ich bin neu so Linq gewarnt werden, was ich tue völlig dumm sein!
Ich habe eine Tabelle mit Casestudies und eine Tabelle von Dienstleistungen bekam mit vielen zu vielen relasionship
Die Fallstudien bereits existieren und ich versuche, einen Dienst einzusetzen, während einiger Fallstudien Verknüpfung, die ihn bereits existieren. Ich war so etwas wie dies die Annahme funktionieren würde?
Service service = new Service()
{
CreateDate = DateTime.Now,
CreatedBy = (from u in db.Users
where u.Id == userId
select u).Take(1).First(),
Description = description,
Title = title,
CaseStudies = (from c in db.CaseStudies
where c.Name == caseStudy
select c),
Icon = iconFile,
FeatureImageGroupId = imgGroupId,
UpdateDate = DateTime.Now,
UpdatedBy = (from u in db.Users
where u.Id == userId
select u).Take(1).First()
};
Das ist aber nicht richtig, da es über beschwert
Kann Typ 'System.Linq.IQueryable' auf 'System.Data.Objects.DataClasses.EntityCollection' nicht implizit konvertieren
Kann jemand bitte zeigen Sie mir den richtigen Weg.
Vielen Dank im Voraus
Lösung
Yo hat das Abfrageergebnis hinzufügen, um die Fallsammlung anstatt zu versuchen, es studiert zu ersetzen.
var service = new Service { ... };
foreach (var caseStudy in db.CaseStudies.Where(s => s.Name == caseStudyName)
{
service.CaseStudies.Add(caseStudy);
}
Sie können in einer Erweiterungsmethode wickeln diese und eine nette Syntax erhalten.
public static class ExtensionMethods
{
public static void AddRange<T>(this EntityCollection<T> entityCollection,
IEnumerable<T> entities)
{
// Add sanity checks here.
foreach (T entity in entities)
{
entityCollection.Add(entity);
}
}
}
Und Sie jetzt die folgende erhalten.
var service = new Service { ... };
service.CaseStudies.AddRange(db.CaseStudies.Where(s => s.Name == caseStudyName));