많은 사람들이 이미 존재할 때 LINQ 하나에서 많은 삽입물을 삽입합니다

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

  •  06-07-2019
  •  | 
  •  

문제

그래서 나는 LINQ를 처음 사용하므로 내가하는 일이 완전히 바보 일 수 있습니다!

나는 선포의 테이블과 많은 반란을 가진 서비스 테이블을 가지고 있습니다.

사례 연구는 이미 존재하며 이미 존재하는 일부 사례 연구를 연결하는 동안 서비스를 삽입하려고합니다. 나는 이런 일이 효과가 있다고 가정했다.

 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'유형을 암시 적으로 변환 할 수 없습니다.

누군가 나에게 올바른 방법을 보여줄 수 있습니까?

미리 감사드립니다

도움이 되었습니까?

해결책

쿼리 결과를 교체하려는 대신 사례 연구 컬렉션에 쿼리 결과를 추가해야합니다.

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