Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# I';我有一个问题,重复使用包括EF 5。我做错了什么?_C#_Linq_Entity Framework_Entity Framework 5 - Fatal编程技术网

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();
}