Linq un à plusieurs insérer quand beaucoup existe déjà
Question
Donc, je suis nouveau sur linq, alors sachez que ce que je fais peut être complètement stupide!
J'ai un tableau des études de cas et un tableau des services avec beaucoup de relations
les études de cas existent déjà et j'essaie d'insérer un service tout en y associant des études de cas existantes. Je pensais que quelque chose comme ça marcherait?
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()
};
Mais ce n'est pas correct car il se plaint
Impossible de convertir implicitement le type 'System.Linq.IQueryable' en 'System.Data.Objects.DataClasses.EntityCollection'
Quelqu'un peut-il me montrer le bon chemin, s'il vous plaît?
Merci d'avance
La solution
Vous devez ajouter le résultat de la requête à la collection d'études de cas au lieu d'essayer de le remplacer.
var service = new Service { ... };
foreach (var caseStudy in db.CaseStudies.Where(s => s.Name == caseStudyName)
{
service.CaseStudies.Add(caseStudy);
}
Vous pouvez envelopper cette méthode dans une méthode d'extension et obtenir une syntaxe intéressante.
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);
}
}
}
Et maintenant vous obtenez ce qui suit.
var service = new Service { ... };
service.CaseStudies.AddRange(db.CaseStudies.Where(s => s.Name == caseStudyName));