ينق واحدة لكثير من إدراج عندما العديد موجود بالفعل

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

  •  06-07-2019
  •  | 
  •  

سؤال

وهكذا أنا جديدة على LINQ ذلك حذر من أن يكون ما أفعله قد تكون غبيا تماما!

ولقد حصلت على جدول caseStudies وجدول الخدمات مع كثير لكثير من relasionship

ودراسات الحالة موجودة بالفعل، وأنا أحاول لادخال خدمة في حين ربط بعض دراسات الحالة التي توجد بالفعل. كنت على افتراض أن شيئا مثل هذا العمل؟

 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