Linq один ко многим вставить, когда многие уже существуют

StackOverflow https://stackoverflow.com/questions/1636477

  •  06-07-2019
  •  | 
  •  

Вопрос

Так что я новичок в linq, поэтому будьте осторожны, то, что я делаю, может быть совершенно глупо!

У меня есть таблица caseStudies и таблица служб со связями «многие ко многим»

тематические исследования уже существуют, и я пытаюсь вставить сервис, связывая некоторые тематические исследования, которые уже существуют с ним. Я предполагал, что-то вроде этого будет работать?

 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()

        };

Но это не правильно, так как жалуется на

Невозможно неявно преобразовать тип 'System.Linq.IQueryable' в 'System.Data.Objects.DataClasses.EntityCollection'

Может кто-нибудь, пожалуйста, покажите мне правильный путь.

Заранее спасибо

Это было полезно?

Решение

Вам нужно добавить результат запроса в коллекцию примеров, а не пытаться заменить его.

var service = new Service { ... };                     

foreach (var caseStudy in db.CaseStudies.Where(s => s.Name == caseStudyName)
{
    service.CaseStudies.Add(caseStudy);
}

Вы можете обернуть это в метод расширения и получить хороший синтаксис.

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);
        }
    }
}

И теперь вы получаете следующее.

var service = new Service { ... };                     

service.CaseStudies.AddRange(db.CaseStudies.Where(s => s.Name == caseStudyName));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top