首页 > 解决方案 > 当我们在 Linq 上使用 .Select(x=>new object) 时,为什么我们不能在多方面选择任何属性

问题描述

我只是想知道一些对我来说毫无意义的事情。我正在使用 ASP.NET Core 5.0,我正在使用 Linq。

我有两个有关系的班级One (MainCategory) - To - (Category) Many。我想写一个 linq,它的目标是 getMainCategoryNameCategoryID. 让我向您展示我的 linq :

public IEnumerable<MainCategory> GetMainCategoryForFair()
{
    return DBContext.MainCategories.Where(x => x.MainCategoryIsFeatured == true
        && x.IsDeleted != true)
        .Select(x => new MainCategory
        {
            MainCategoryName = x.MainCategoryName,
            Categories = x.Categories
        }).ToList();
}

我知道,该查询将获取所有属性,Categories这是我试图避免的事情。是否可以 ?

如果有可能,那怎么办?

如果不是,为什么?

标签: c#linqasp.net-coreentity-framework-core

解决方案


当然。只是不要投影所有属性。通常,如果您返回不同的数据形状,您会引入一个新类来返回,而不是返回具有一堆空属性的实体类型,例如

public IEnumerable<MainCategoryDTO> GetMainCategoryForFair()
{
    return DBContext.MainCategories.Where(x => x.MainCategoryIsFeatured == true
        && x.IsDeleted != true)
        .Select(x => new MainCategoryDTO()
        {
            MainCategoryName = x.MainCategoryName,
            Categories = x.Categories.Select( c => new CategoryDTO(){CategoryName = c.Name, ...}).ToList()
        }).ToList();
}

推荐阅读