簡體   English   中英

在Entity Framework Linq查詢上創建嵌套對象

[英]Create nested object on Entity Framework Linq query

我正在嘗試從Ef查詢中獲取嵌套數據。

var imagePath = ImagePath.GetImagePath();
                   var data = repos.JobCategoryRepo.GetMany(x => x.Parent == null).Select(x => new JobCategoryModel
                    {
                        CategoryName = x.CategoryName,
                        Identifier = x.Identifier,
                        ImagePath = x.Images != null ? imagePath+"/"+x.Images.ImagePath : null,
                        ChildCategories =  x.SubCategory.Select(y => new JobCategoryModel
                        {
                            CategoryName = y.CategoryName,
                            Identifier = y.Identifier,
                            ImagePath = y.Images != null ? imagePath + "/" + y.Images.ImagePath : null,
                            ChildCategories=null
                        })
                    });

並且repos.JobCategoryRepo.GetMany(x => x.Parent == null)將返回IQueryable

據我所知,在第二級上沒有ChildCategories,所以在第二級上,我將ChildCategories=null設置ChildCategories=null

但是Ef查詢不允許我在此級別分配Null值。

無法創建類型為'System.Collections.Generic.IEnumerable`1 [[[EntityModel.JobCategoryModel,EntityModel,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]“的空常量值。 在此上下文中僅支持實體類型,枚舉類型或原始類型。

如果移除ChildCategories=null ,它將給出錯誤

發生內部異常:類型'EntityModel.JobCategoryModel'出現在單個LINQ to Entities查詢中的兩個結構不兼容的初始化中。 可以在同一查詢的兩個位置初始化一個類型,但前提是兩個位置都設置了相同的屬性,並且這些屬性以相同的順序設置。

第二種情況(刪除ChildCategories=null分配)聽起來像是一個奇怪的EF規則,我想不出任何邏輯上的理由來施加約束。

無論如何,技巧(解決方法)是定義一個假的派生類,並將內部選擇投射到該類(刪除ChildCategories=null )。 因此,以下工作:

class JobSubCategoryModel : JobCategoryModel { }

// ...
ChildCategories =  x.SubCategory.Select(y => new JobSubCategoryModel
{
    CategoryName = y.CategoryName,
    Identifier = y.Identifier,
    ImagePath = y.Images != null ? imagePath + "/" + y.Images.ImagePath : null,
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM