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

Était-ce utile?

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));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top