【问题标题】:I am trying to write a filter for choices made with buttons我正在尝试为使用按钮做出的选择编写一个过滤器
【发布时间】:2019-10-15 01:31:13
【问题描述】:

我是使用 linq 的 c# 新手,我正在尝试弄清楚如何使用按钮进行多重过滤选择。

我已连接到数据库, 我有enum stats{approved, rejected, pending approval, pending rejected, cancelled};

一个IEnumerator 类型的列表,我该怎么做才能使代码更易于管理,因为将来可以继续添加 N 个选项,并且它仍然可以工作,而不是使用 if else or switch cases 硬编码所有可能的情况。

例如

if(stats contains approve)
List = List.dbset.where(x => x.id.stats == approved);

//return the view that displays all the list of things with stats approved.

我不确定如何将它组合成一个循环。需要一些帮助。

所需的输出是我可以选择 2 个或更多按钮,并且列表会返回那些选定的过滤器值元素。

【问题讨论】:

  • 您可以创建一个按钮选择的值列表,然后在查询中使用该列表作为List.dbset.where(x => choices.Containts(x.id.stats)); 这里choices 是按钮选择的值的集合。
  • @Bonbon,如果你想管理stats,首先不要使用enum。我建议创建另一个 object (class) 来定义您的 stats 属性。 stats 对象应该从包含所有统计信息的数据库中查询,并通过 LINQ 检索记录。例如IList<stats> statList = new List<stats>(); 您可以从statList object 循环并在那里执行您的逻辑。
  • 我试试看!谢谢!
  • @JKerny 我已经有了一些获取过滤器的方法,但不知道如何组合它们以使其灵活地选择任何数量的过滤按钮。我有一个包含统计信息的哈希集,我有一个应用程序列表列表,我可以简单地执行 x => x.stats.Equals(stats.cancelled) 之类的操作。
  • @RichardAnthonyHein 感谢您的建议,但加入模式不是我想要的。

标签: c# asp.net-mvc linq


【解决方案1】:

也许你可以像这样开发一个过滤器方法,而不是发送一些值到过滤器;

List<yourType> filteredList = dbset.ToList();
if(stats1 contains approve){
    List<yourType> filteredList = filteredList.where(x => 
x.id.stats==approved).ToList();
}
if(stats2 contains approve){
    List<yourType> filteredList = filteredList.where(x => 
x.id.stats==approved).ToList();
}
return filteredList;

【讨论】:

  • 我已经有这样的东西了,我目前有 5 个列表。 1 包含所有内容的列表。 1 分别筛选出每种类型的统计数据的列表。我想看看如何将它们结合起来。这个想法是我试图将我的列表组合成 1 个列表以显示输出,例如我选择了 stat 1 和 2,然后我合并 list1 和 list2 并输出列表。可能我限制自己太多了,因为源代码不是我自己做的,我的任务是用它来实现新的东西,所以我想我必须问我可以触摸什么,不能触摸什么。
  • 所有列表都是同一类型?如果这些是相同的类型,您可以将所有选择的列表添加到过滤列表变量以响应?
【解决方案2】:

好的,实际上问题是因为返回视图总是返回包含所有内容的列表,尽管进行了多次过滤。我所做的只是创建一个新的显示列表,并在应用过滤器时合并每个过滤列表并返回该显示列表

【讨论】:

    猜你喜欢
    • 2018-07-20
    • 2022-06-13
    • 2023-04-08
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 2017-06-25
    相关资源
    最近更新 更多