Как выбрать данные из родительских и всех типов дочерних таблиц в одном запросе LINQ? - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть родительская таблица и несколько дочерних таблиц, структура которых отличается друг от друга. Дочерние таблицы имеют ключ родительской таблицы как внешний ключ с отношением один к одному. В одно время родительская таблица имеет только одного дочернего элемента, а другие дочерние таблицы равны нулю. Могу ли я собрать запрос, который получает все данные из родительской таблицы и всех дочерних таблиц со всеми дополнительными столбцами?

Я использую приведенный ниже код, но он имеет много запросов, и это не хорошо для меня, поэтому я хочусобрать эти запросы в один.

(from reward in entities.REWARDS

where reward.Fk_BrandId_Reward == brandId && reward.RewardStatus == true

orderby reward.RewardRedemption ascending
select new
{
    reward.RewardId,
    reward.RewardImage,
    reward.RewardTitle,
    reward.RewardDescription,
    reward.TYPE.Title,
    reward.RewardRedemption,
    reward.RewardStatus,
    reward.RewardExpireInDays,
    reward.RewardValidFrom,
    reward.RewardValidTo,
    reward.RewardDeductionPoints,
    reward.RewardIsIsSignUpBonus,
    reward.RewardIsTiered,
    reward.RewardTierIncrement,
    reward.Fk_BrandId_Reward,

    Type = (from type in entities.TYPES
            where type.Id == reward.FK_RewardTypeId
            select new
            {
                type.Id,
                type.Title
            }).FirstOrDefault(),

    Schedule = (from schedule in entities.SCHEDULES
                where schedule.FK_RewardId == reward.RewardId
                select new
                {
                    schedule.Id,
                    schedule.FromWeekDay,
                    schedule.FromMonthDate,
                    schedule.FromAnnualDate,
                    schedule.ExpireInDays,
                    schedule.FK_RewardId
                }).FirstOrDefault(),

    ItemReward = (from item in entities.ITEMS
            where item.FK_RewardId == reward.RewardId
            select new
            {
                item.Id,
                item.RewardDiscount,
                item.FK_RewardId,
                Product = (from product in entities.PRODUCTS
                            where product.ProductId == item.FK_ProductId
                            select new
                            {
                                product.ProductId,
                                product.ProductTitle,
                                product.ProductOldPrice,
                                product.ProductNewPrice,
                                product.ProductImageUrl,
                                product.ProductContent,
                                product.ProductCategory,
                                product.ProductSubCategory,
                                product.ProductPostedTime,
                                product.ProductStocks,
                                product.ProductStatus,
                                product.FK_BrandId_Products
                            }).FirstOrDefault(),

                Recipe = (from recipe in entities.RECIPEs
                            where recipe.RecipeId == item.FK_RecipeId
                            select new
                            {
                                recipe.RecipeId,
                                recipe.RecipeImage,
                                recipe.RecipeTitle,
                                recipe.RecipeDescription,
                                recipe.RecipePrice,
                                recipe.RecipeStatus,
                                recipe.RecipePostTime,
                                recipe.RecipeStock,
                                recipe.CATEGORY.CategoryTitle,
                                recipe.FK_BrandId_Recipes,
                                recipe.RecipeExtraObject
                            }).FirstOrDefault()

            }).FirstOrDefault(),

    CashReward = (from cash in entities.CASHes
                        where cash.FK_RewardId == reward.RewardId
                        select new
                        {
                            cash.Id,
                            cash.RewardCash,
                            cash.FK_RewardId
                        }).FirstOrDefault(),

    PointReward = (from point in entities.POINTS
                        where point.FK_RewardId == reward.RewardId
                        select new
                        {
                            point.Id,
                            point.RewardPoints,
                            point.FK_RewardId
                        }).FirstOrDefault(),

    DeliveryReward = (from delivery in entities.DELIVERies
                where delivery.FK_RewardId == reward.RewardId
                select new
                {
                    delivery.Id,
                    delivery.RewardDiscount,
                    delivery.FK_RewardId
                }).FirstOrDefault()

}).ToList();

У любого есть идея теста. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...