Linq один ко многим вставить, когда многие уже существуют
Вопрос
Так что я новичок в 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));