Entity framework core 扩展方法不应用LINQ where子句

Entity framework core 扩展方法不应用LINQ where子句,entity-framework-core,dbcontext,.net-5,Entity Framework Core,Dbcontext,.net 5,我试图在代码中实现查询对象,但遇到了一个问题。将meetId=1传递给GetMeetingDTO时,SingleOrDefault会引发异常。我的数据库目前拥有6个会议,所有会议都具有唯一的ID 1-6。我已经检查了值是否通过FilterOptions正确传递到FilterMeetingsBy,并且使用Visual Studio看起来还可以。显然没有应用过滤,因此SingleOrDefault会抛出错误。我已经测试了省略扩展方法并直接在上下文中应用.Wherep=>p.Id==1。然后不会抛出错

我试图在代码中实现查询对象,但遇到了一个问题。将meetId=1传递给GetMeetingDTO时,SingleOrDefault会引发异常。我的数据库目前拥有6个会议,所有会议都具有唯一的ID 1-6。我已经检查了值是否通过FilterOptions正确传递到FilterMeetingsBy,并且使用Visual Studio看起来还可以。显然没有应用过滤,因此SingleOrDefault会抛出错误。我已经测试了省略扩展方法并直接在上下文中应用.Wherep=>p.Id==1。然后不会抛出错误

    public async Task<MeetingDTO> GetMeetingDTO(long meetId)
    {
        IEnumerable<Meeting> meetings = await context.MeetDbSet
            .FilterMeetingsBy(new FilterOptions { MeetingId = meetId }).ToListAsync();

        return mapper.Map<MeetingDTO>(meetings.SingleOrDefault());
    }
下面是扩展方法

public static class FilterMeetings
{
    public static IQueryable<Meeting> FilterMeetingsBy(this IQueryable<Meeting> meetings, FilterOptions options)
    {
        if (options == null)
            return meetings;

        if (options.MeetingId.HasValue)
        {
            meetings.Where(p => p.Id == options.MeetingId.Value);
            return meetings;
        }

        if (options.SortFromDate.HasValue)
            meetings.Where(p => p.StartDate >= options.SortFromDate.Value);
        if (options.SortToDate.HasValue)
            meetings.Where(p => p.StartDate <= options.SortToDate.Value);

        return meetings;
    }
}

public class FilterOptions
{
    public long? MeetingId { get; set; }

    public DateTime? SortFromDate { get; set; }
    public DateTime? SortToDate { get; set; }
}

扩展方法返回原始查询。LINQ操作符不修改原始查询,而是返回一个新查询。但是扩展方法不返回新查询

应将其改写为:

public static IQueryable<Meeting> FilterMeetingsBy(
        this IQueryable<Meeting> query, 
        FilterOptions options)
{
    if (options == null)
        return query;

    if (options.MeetingId.HasValue)
    {
        query =query.Where(p => p.Id == options.MeetingId.Value);
        return query;
    }

    if (options.SortFromDate.HasValue)
    {
        query=query.Where(p => p.StartDate >= options.SortFromDate.Value);
    }
    if (options.SortToDate.HasValue)
    {
        query=query.Where(p => p.StartDate <= options.SortToDate.Value);
    }

    return query;
}

抛出的异常是什么?