如何使用年龄(或任何其他)范围进行编程

本文关键字:范围 编程 其他 任何 何使用 | 更新日期: 2023-09-27 17:49:27

我试图创建一个维护页面,管理员可以创建/修改/删除年龄范围,然后显示在客户选择他们的年龄范围的页面上。

年龄范围

1-20,
21-40,
41-60,
61-80,
81-100

允许修改和删除值,但范围不能重叠或首先存在

所以根据上面的内容,下面的条目不能存在

2-30 - falls within a range or
22- 30 - falls within a range etc etc
到目前为止,我有一些代码来检查范围是否存在
IEnumerable<AgeRange> ar = from a in myDataContext.AgeRanges.Where(aa => aa.MinAge <= NewAge.MinAge && aa.MaxAge >= NewAge.MinAge) select a;

尚未完全测试,但到目前为止似乎可行。所以我添加了一个删除函数。如果我删除范围41-60,那么我有一组新的问题。

如果我添加一个新的条目42 - 59,那么客户不能选择任何范围,如果他们的年龄是41或60,因为上面的代码不会找到上面的范围,所以它会允许它保存。所以在这个例子中修改后的范围是

1-20
21-40 - Customer is 41 so they cant select this option
42-59 - Customer is 41 so they cant select this option either. If the customer is 60 cant select this option
61-80 - If the customer is 60 cant select this option either.
81-100

我想在更新现有范围时也会有类似的问题。

是否有一个简单的方法来做到这一点或适当的控制,我可以使用或任何其他的想法?

谢谢

如何使用年龄(或任何其他)范围进行编程

一种可能是只有一个"Maximum Age"字段。检查已经存在的范围变得更简单:

IEnumerable<AgeRange> ar = from a in myDataContext.AgeRanges
             .Where(aa => aa.MaximimAge != NewAge.MaximumAge) select a;

您也不必担心在范围之间留下空白(因为它会自动填充)。

你剩下的唯一问题将是在UI内,呈现你的"最小-最大"值列表。然而,编写几行代码应该是相对简单的,对于任何给定的AgeRange,可以找到"下一个最低"的AgeRange的最大年龄,并将其加1并将其作为当前最小年龄。

到目前为止每个人都描述的技术是最简单的答案。而不是让管理员输入"1-10,11-20,21-30",他们只是输入"10,20,30"。您编写代码,在管理完成后对所有这些最大年龄编号进行排序,并动态创建整个年龄范围列表。(range1 = 1 ~ max1, range2 =[max1 + 1 ~ max2])rangeN = max(N-1) + 1到maxN)

如果你必须允许用户输入最小和最大年龄,那么你需要在用户点击保存/完成等按钮时验证整个设置。为此,我将编写一个方法,按升序对整个范围集进行排序,然后测试每个年龄范围(在第一个年龄范围之后)的最小年龄是否等于其前面范围的最大年龄。