首页 > 解决方案 > 使用条件无法正常获取结果(C#)

问题描述

我试图从数据库中获取数据并将其分配给列表

这里有2个条件。1 - 我只有 categoryId 和 2 - 我有 category 和 subcategoryId

我写了这样的代码

public async Task<List<TimelineItemDto>> GetFilteredClasses(int? categoryId, int? subcategoryId)
    {
        List<TimelineItemDto> filteredClasses;
        if (categoryId != null)
        {
            filteredClasses = await _context.Events
                .Where(x => x.CategoryId == categoryId && x.EventType == EntityType.Class)
                .ProjectTo<TimelineItemDto>()
                .ToListAsync();
        }

        if (categoryId != null && subcategoryId != null)
        {
            filteredClasses = await _context.Events
                .Where(x => x.CategoryId == categoryId && x.SubcategoryId == subcategoryId &&
                            x.EventType == EntityType.Class)
                .ProjectTo<TimelineItemDto>()
                .ToListAsync();
        }

        else
        {
            filteredClasses = await _context.Events.Where(x =>
                    x.EventType == EntityType.Class).ProjectTo<TimelineItemDto>()
                .ToListAsync();
        }

        return filteredClasses;
    }

但起初if我得到了这个在此处输入图像描述

一秒钟ifelse完全没问题,它被执行并填充列表

我该如何解决这个问题?

标签: c#asp.netasp.net-core

解决方案


您应该如下更新条件流:

if (categoryId != null && subcategoryId != null)
{
    ...
}
else if (categoryId != null)
{
    ...
}
else
{
   ...
}

有了上面,filteredClasses不会被最后一个 else 条件覆盖。您当前的代码首先评估if然后if& else。两者都是不同的代码块,最后else总是被执行。


推荐阅读