I wrote a code which return a list from 2 different Databases. The joint field between these tow dbcontext is accountid and email (both has a same value). Since there are 2 different databases, I can't use join in entity framework. So I used a nested using and for each blocks. Here is my code:
namespace AdminMvc.Components.BankDepositHistory { public class BankDepositHistoryHelper { public static List<BankDepositHistoryItemDto> GetChangeRequestsList(int skip, int take, out int total, string name, string email, AvailableBankDepositStates state) { using (var myketAdsDB = new MyketAdsEntities()) { using (var myketDB = new MyketReadOnlyDb()) { #region DefaultQuery var bankDepositHistories = myketAdsDB.BankDepositHistories.AsQueryable(); #endregion #region Filtering if (!string.IsNullOrWhiteSpace(name)) { var emails = myketDB.AppDevelopers .Where(n => n.RealName.Contains(name)) .Select(e => e.Email).ToList(); // emails.Add(email); if (emails.Count > 0) { bankDepositHistories = bankDepositHistories.Where(e => emails.Contains(e.AccountId)); } } if (!string.IsNullOrWhiteSpace(email)) { bankDepositHistories = bankDepositHistories.Where(a => a.AccountId.Contains(email)); } if (state != AvailableBankDepositStates.All) { bankDepositHistories = state == AvailableBankDepositStates.Success ? bankDepositHistories.Where(x => x.State == AvailableBankDepositStates.Success.ToString()) : bankDepositHistories.Where(x => x.State == AvailableBankDepositStates.Fail.ToString()); } else { bankDepositHistories = bankDepositHistories. Where(x => x.State != BankDepositState.Start.ToString()); } #endregion #region GetingTotalpages total = bankDepositHistories.Count(); #endregion #region Pagination var pageResult = bankDepositHistories.OrderByDescending(ba => ba.CreationDate).Skip(skip).Take(take).ToList(); #endregion #region FillingDomainObjects var emailFilter = pageResult.Select(r => r.AccountId).ToList(); var developers = myketDB.AppDevelopers.Where(a => emailFilter.Contains(a.Email)). Select(r => new { r.RealName, r.Email }).ToList(); var result = pageResult .Select(b => new BankDepositHistoryItemDto() { Id = b.Id, AccountId = b.AccountId, Amount = b.Amount, ClientIp = b.ClientIp, State = (BankDepositState)Enum.Parse(typeof(BankDepositState), b.State, true), ReturnUrl = b.ReturnUrl, AdditionalData = b.AdditionalData, Gateway = b.Gateway, CreationDate = b.CreationDate, PaymentRefNumber = b.PaymentRefNumber, Uuid = b.Uuid, }).ToList(); foreach (var bankDepositHistory in result) { foreach (var developer in developers) { if (bankDepositHistory.AccountId == developer.Email) { bankDepositHistory.RealName = developer.RealName; } } } return result; #endregion } } } I was wondering if it's possible to avoid using nested using and write a separated using for each database.
usingstatements? What value does that give you?usingstatements one below the other without using an opening brackets