C# I';我有一个问题,重复使用包括EF 5。我做错了什么?
我对以下代码有问题C# I';我有一个问题,重复使用包括EF 5。我做错了什么?,c#,linq,entity-framework,entity-framework-5,C#,Linq,Entity Framework,Entity Framework 5,我对以下代码有问题 public IEnumerable<BillingConfiguration> GetBillingConfigurationsForAccount(int accountId, DateTime? effectiveDate) { var result = new List<BillingConfiguration>(); var accountIds = new List<int>();
public IEnumerable<BillingConfiguration> GetBillingConfigurationsForAccount(int accountId, DateTime? effectiveDate)
{
var result = new List<BillingConfiguration>();
var accountIds = new List<int>();
var billingGroupIds = new List<int>();
using (var context = new GbContext())
{
var account = context.Accounts.Where(a => a.AccountId == accountId).SingleOrDefault();
if (account.ParentAccountId == null) // This is a parent account
{
// Get list of sub account ids
accountIds = context.Accounts.Where(a => a.ParentAccountId == accountId).Select(x => x.AccountId).ToList();
accountIds.Add(accountId);
}
else // This is a sub account
{
accountIds.Add(accountId);
}
// Get list of Billing Configurations for all accountIds
IQueryable<BillingConfigurationAccount> accountQuery = context.BillingConfigurationAccounts
.Where(a => accountIds.Contains(a.AccountId)).AsQueryable();
AddBillingConfigurationAccountIncludes(accountQuery);
var accountBillingConfigurations = accountQuery.ToList();
//IQueryable<BillingConfigurationAccount> accountQuery = context.BillingConfigurationAccounts;
//AddBillingConfigurationAccountIncludes(accountQuery);
//accountQuery = accountQuery.Where(a => accountIds.Contains(a.AccountId));
//var accountBillingConfigurations = accountQuery.ToList();
if (accountBillingConfigurations.HasValues())
{
accountBillingConfigurations.ForEach(x => result.Add(x.BillingConfiguration));
}
return result;
}
}
private void AddBillingConfigurationAccountIncludes(IQueryable<BillingConfigurationAccount> query)
{
query = query
.Include(p => p.BillingConfiguration)
.Include(p => p.BillingConfiguration.BillingConfigurationLevel)
.Include(p => p.BillingConfiguration.BillType)
.Include(p => p.BillingConfiguration.PayerOptionType)
.Include(p => p.BillingConfiguration.BillModeOptions)
.Include(p => p.BillingConfiguration.BillModeOptions.Select(m => m.BillMode))
.Include(p => p.BillingConfiguration.BillModeOptions.Select(m => m.FirstPastDueDateOptionsType))
.Include(p => p.BillingConfiguration.BillModeOptions.Select(m => m.LapseNoticeOptionsType))
.Include(p => p.BillingConfiguration.BillModeOptions.Select(m => m.PaymentDueDateOptionsType))
.Include(p => p.BillingConfiguration.BillModeOptions.Select(m => m.PaymentGracePeriodType))
.Include(p => p.BillingConfiguration.BillModeOptions.Select(m => m.SecondPastDueDateOptionsType))
.Include(p => p.BillingConfiguration.BillModeOptions.Select(m => m.BillModeOptionPaymentMethods))
.Include(p => p.BillingConfiguration.BillModeOptions.Select(m => m.BillModeOptionPaymentMethods.Select(n => n.PaymentMethodType)));
}
该代码实际上填写了BillingConfiguration
实体及其所有子实体。
我想做的事可能吗?如果,那么我做错了什么
谢谢这是一个微妙的问题
您正确地假设
void SomeMethod(IQueryable<T> query)
在您的情况下,这将成为:
accountQuery = AddBillingConfigurationAccountIncludes(accountQuery);
如果你不相信我,试试Linqpad的这个小程序:)
void Main()
{
var ints=Enumerable.Range(1,10).ToArray();
其他(综合,11);
ints.Dump();
}
void AddInt(IEnumerable list,int i)
{
list=list.Concat(新[]{i});
list.Dump();
}
IQueryable<T> SomeMethod(IQueryable<T> query)
accountQuery = AddBillingConfigurationAccountIncludes(accountQuery);
void Main()
{
var ints = Enumerable.Range(1,10).ToArray();
AddInt(ints, 11);
ints.Dump();
}
void AddInt(IEnumerable<int> list, int i)
{
list = list.Concat(new[] {i});
list.Dump();
}