Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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# 从带有IEnumerable的联接返回IQueryable_C#_Performance_Entity Framework_Linq_.net Core - Fatal编程技术网

C# 从带有IEnumerable的联接返回IQueryable

C# 从带有IEnumerable的联接返回IQueryable,c#,performance,entity-framework,linq,.net-core,C#,Performance,Entity Framework,Linq,.net Core,为了避免报告中出现空白,请使用数据范围进行联接 private async Task<IEnumerable<ReportDTO>> JoinDateRangeAsync( DashboardFilter filter, IQueryable<ReportDTO> queryable ) { if (filter is null) return null; if (querya

为了避免报告中出现空白,请使用数据范围进行联接

private async Task<IEnumerable<ReportDTO>> JoinDateRangeAsync( DashboardFilter filter, IQueryable<ReportDTO> queryable ) {

            if (filter is null)
                return null;

            if (queryable is null)
                return null;

            var dateRange = DateHelpers.GetDatesRanges( await this.GetFromDateFromDashbordFilterAsync( filter ), GetToDateFromDashbordFilter( filter ) );
            return
                from d in dateRange
                join r in queryable on new { x = (short)d.DayOfYear, y = (short)d.Year } equals new { x = r.DayOfYear, y = r.Year} into dr
                from r in dr.DefaultIfEmpty()
                select new ReportDTO( d, r );
        }

以这种方式a必须返回IEnumerable的问题。出于性能原因,是否可以返回IQueryable类型的对象?

将其移动到数据库中。@Gserg,谢谢您的提示。这是我最初的想法。我发现EF的实现更简单,我没有想到要面对这个问题。对于DB实现,我应该有一个包含所有日期的表。哪一种是最佳做法?在数据库中生成日期列表,例如从表值函数生成。
        public static DateTime[] GetDatesRanges( DateTime from, DateTime to ) {
            return Enumerable
                .Range( 0, 1 + to.Subtract( from ).Days )
                .Select( offset => from.AddDays( offset ) )
                .ToArray();
        }