过滤函数在布尔过滤器上没有按预期工作

问题描述 投票:0回答:0

我有一个简单的代码来过滤数据。可悲的是,文本过滤器只对在剃须刀页面上选择的第一个 bikeType 进行良好过滤(您可以在其中选择“全部”,并将此参数作为字符串传递给方法。空,这就是我返回 true 的原因,以匹配每个使用此过滤器输入)和 bool 过滤器并没有真正起作用 - 它们完全“随机”地过滤条目。这是我在这种情况下使用 Func 的第一种方法,因此这可能是一些简单的问题。 这是代码:

public async Task<List<Entry>> GetFilteredEntries(string bikeType, string bikeModel, bool stockTiresOnly, bool stockSuspensionOnly)
{
    Func<entry, string, bool> bikeTypeFilter = (entry, type) =>
    {
        if (string.IsNullOrEmpty(type))
        {
            return true;
        }
        else
        {
            return entry.Bike.Type == type;
        }
    };

    Func<Entry, string, bool> bikeModelFilter = (entry, name) =>
    {
        if (string.IsNullOrEmpty(name))
        {
            return true;
        }
        else
        {
            return entry.Bike.Model == name;
        }
    };

    Func<Entry, bool, bool> tiresFilter = (entry, stockTires) =>
    {
        if (stockTires)
        {
            return !entry.IsUsingAftermarketTires;      //because in database i am saving a parameter "IsUsingAftermarketTires" its need to be inverted here
        }
        else
        {
            return entry.IsUsingAftermarketTires;
        }
    };

    Func<Entry, bool, bool> suspensionFilter = (entry, stockSuspension) =>
    {
        if (stockSuspension)
        {
            return !entry.IsUsingAftermarketSuspension;     //the same here
        }
        else
        {
            return entry.IsUsingAftermarketSuspension;
        }
    };

    var entries = await GetAllEntries();    //Returns List<Entry> with every related table to Entry (not fast way in here)
    var filteredEntries = entries
        .Where(re => bikeTypeFilter(re, bikeType) && bikeModelFilter(re, bikeModel) && tiresFilter(re, stockTiresOnly) && suspensionFilter(re, stockSuspensionOnly))
        .ToList();
    return filteredEntries;
}

首先 - 方法参数正确填充数据。 起初我创建了大的 .Where 子句,但在阅读了 Func 可能在这里有用之后我创建了它们,但老实说我真的不知道该代码有什么问题。 PS - 如果有一些错误,如倒写的字母等。情况并非如此,因为我在记事本 ++ 中重写了示例代码,以便其他用户在这里更容易理解 - 所以这里的每个变量都被重命名了。

c# linq asp.net-core func
© www.soinside.com 2019 - 2024. All rights reserved.