Linq uno a molti inserisce quando molti già esistono
Domanda
Quindi sono nuovo di Linq, quindi tieni presente che quello che sto facendo potrebbe essere completamente stupido!
Ho una tabella di caseStudies e una tabella di servizi con molte o molte relazioni
i case study esistono già e sto cercando di inserire un servizio mentre colleghi alcuni case study già esistenti ad esso. Pensavo che qualcosa del genere avrebbe funzionato?
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()
};
Ma questo non è corretto perché si lamenta
Impossibile convertire implicitamente il tipo 'System.Linq.IQueryable' in 'System.Data.Objects.DataClasses.EntityCollection'
Qualcuno può mostrarmi nel modo giusto.
Grazie in anticipo
Soluzione
Devi aggiungere il risultato della query alla raccolta di case study invece di provare a sostituirlo.
var service = new Service { ... };
foreach (var caseStudy in db.CaseStudies.Where(s => s.Name == caseStudyName)
{
service.CaseStudies.Add(caseStudy);
}
Puoi racchiuderlo in un metodo di estensione e ottenere una bella sintassi.
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);
}
}
}
E ora ottieni quanto segue.
var service = new Service { ... };
service.CaseStudies.AddRange(db.CaseStudies.Where(s => s.Name == caseStudyName));