簡體   English   中英

選擇EF Core中的性能問題

[英]Select performance problems in EF Core

        _context.Homestays   
                .Include(x => x.CreatedUser)
                .Include(x => x.UpdatedUser)
                .Include(x => x.HomestayEvaluations)
                .Include(x => x.HomestayContracts)
                .Include(x => x.HomestayPoliceChecks)
                .Include(x => x.HomestayHouseHolds)
                .AsNoTracking()
                .Select(x => new Homestay()
                {
                    HomestayId = x.HomestayId,
                    HomestayFamily = ConstValue.GetHomestayFamilyName(x),
                    Address = x.Address,
                    Score = x.HomestayEvaluations.Any(x1 => x1.IsEvaluationActive) ? x.HomestayEvaluations.LastOrDefault(x1 => x1.IsEvaluationActive).GetScore() : 0,
                    Contract = x.HomestayContracts.Any(x1 => x1.IsContractActive) ? x.HomestayContracts.LastOrDefault(x1 => x1.IsContractActive).ContractDate : null,
                    Students = x.Students,
                    HouseHolders = x.HomestayHouseHolds.Count(x1 => x1.IsHouseHoldActive),
                    PoliceCheck = x.HomestayPoliceChecks.Any(x1 => x1.IsPoliceCheckActive) ? x.HomestayPoliceChecks.LastOrDefault(x1 => x1.IsPoliceCheckActive).PoliceCheckDate : null,
                    Language = x.Language,
                    Room = x.Room,
                    IsActive = x.IsActive,
                    CreatedDate = x.CreatedDate,
                    CreatedUserName = ConstValue.GetUserName(x.CreatedUser),
                    UpdatedDate = x.UpdatedDate,
                    UpdatedUserName = ConstValue.GetUserName(x.UpdatedUser)
                })
                .OrderByDescending(x => x.HomestayId);

您好,我想知道如何更好地更改選擇查詢?

下面的代碼看起來很雜亂。 首先執行任何一個,如果是,則執行最后一個。 但是還有更多短代碼嗎?

合約= x.HomestayContracts.Any(x1 => x1.IsContractActive)嗎? x.HomestayContracts.LastOrDefault(x1 => x1.IsContractActive).ContractDate:null

我嘗試不使用any(),如果沒有數據,它將作為空對象出現錯誤。

請幫我。

謝謝 :)

用這個

Contract = x.HomestayContracts.LastOrDefault(x1 => x1.IsContractActive)?.ContractDate ?? null

您也可以在上下文的配置中禁用此查詢的延遲加載

context.Configuration.LazyLoadingEnabled = false; 

這樣,您可以消除Include方法,導致語句更短,但性能不會更好。 使用存儲過程來提高性能。 實體框架中的存儲過程

暫無
暫無

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

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