목록에서 모델을 채우기 위해 LINQ to SELECT의 SELECT에서 하위 쿼리를 수행 할 수 있습니까?

entity-framework-core linq

문제

내 뷰 모델에서 List<string> 을 채우기 위해 LINQ to Entities 쿼리의 .Select 부분에 하위 쿼리를 포함 할 수 있습니까? 필드 값을 가져 오려면 Select 절 내에서 Linq To Entities 하위 쿼리를 사용 했지만 오류가 발생했습니다.

NotImplementedException : Microsoft.Data.Entity.Query.ResultOperators.Internal.QueryAnnotationResultOperator

이것은 Entity Framework 7 및 ASP.Net 5 MVC 6과 관련이 있습니까?

var model = _DbContext.ReleaseVersions
                        .OrderByDescending(rv => rv.DateReleased)
                        .Select(rv => new ReleaseNotesVM()
                        {
                            ID = rv.ID,
                            CurrentVersion = string.Concat(rv.Major, '.', rv.Minor, '.', rv.Patch),
                            ReleaseNotes = _DbContext.ReleaseNotes
                                                    .Where(rn => rn.ReleaseVersionID == rv.ID)
                                                    .Include(rn => rn.ReleaseVersion)
                                                    .Select(rn => rn.Note)
                                                    .ToList()
                        }).FirstOrDefault();

채워지는 ViewModel :

var model = _DbContext.ReleaseVersions
                        .OrderByDescending(rv => rv.DateReleased)
                        .Select(rv => new ReleaseNotesVM()
                        {
                            ID = rv.ID,
                            CurrentVersion = string.Concat(rv.Major, '.', rv.Minor, '.', rv.Patch),
                            ReleaseNotes = _DbContext.ReleaseNotes
                                                    .Where(rn => rn.ReleaseVersionID == rv.ID)
                                                    .Include(rn => rn.ReleaseVersion)
                                                    .Select(rn => rn.Note)
                                                    .ToList()
                        }).FirstOrDefault();

DataModel :

var model = _DbContext.ReleaseVersions
                        .OrderByDescending(rv => rv.DateReleased)
                        .Select(rv => new ReleaseNotesVM()
                        {
                            ID = rv.ID,
                            CurrentVersion = string.Concat(rv.Major, '.', rv.Minor, '.', rv.Patch),
                            ReleaseNotes = _DbContext.ReleaseNotes
                                                    .Where(rn => rn.ReleaseVersionID == rv.ID)
                                                    .Include(rn => rn.ReleaseVersion)
                                                    .Select(rn => rn.Note)
                                                    .ToList()
                        }).FirstOrDefault();

수락 된 답변

올바르게 가정하면 ReleaseVersionsReleaseNotes 사이에 일대 다 관계가 있어야합니다. 즉, ReleaseNotes 컬렉션을 참조하는 ReleaseVersion 클래스의 탐색 속성이 있어야하므로 다음과 같이 코드를 다시 작성할 수 있습니다.

var model = _DbContext.ReleaseVersions
                    .Include(rv => rv.ReleaseNotes)
                    .OrderByDescending(rv => rv.DateReleased)
                    .Select(rv => new ReleaseNotesVM
                    {
                        ID = rv.ID,
                        CurrentVersion = string.Concat(rv.Major, '.', rv.Minor, '.', rv.Patch),
                        ReleaseNotes = rv.ReleaseNotes.Select(rn => rn.Note).ToList()
                    }).FirstOrDefault();

최신 정보

사용 List<string> ReleaseNotes 대신 ICollection<string>ReleaseNotesVM .




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.