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

时间:2015-05-15 13:34:58

标签: c# asp.net .net vb.net

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

年龄范围

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

我认为在更新现有范围时我会遇到类似的问题。

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

由于

2 个答案:

答案 0 :(得分:2)

一种可能性是拥有一个“最大年龄”字段。您对已存在范围的检查变得更加简单:

Invalid property &#39;userName&#39; of bean class [com.test.Registration]: 
Could not find field for property during fallback access! (through reference chain: org.springframework.hateoas.PagedResources[&quot;_embedded&quot;]
-&gt;java.util.UnmodifiableMap[&quot;registrations&quot;]-&gt;java.util.ArrayList[0]-&gt;org.springframework.data.rest.webmvc.json.[&quot;content&quot;]
-&gt;$Proxy119[&quot;userName&quot;])</div></body></html>

您也无需担心在范围之间留下间隙(因为它会自动填充)。

您留下的唯一问题是在UI中,呈现“最小 - 最大”值列表。但是,编写几行代码应该相对简单,对于任何给定的IEnumerable<AgeRange> ar = from a in myDataContext.AgeRanges .Where(aa => aa.MaximimAge != NewAge.MaximumAge) select a; ,可以找到“下一个最低”AgeRange的最大年龄,将其加1并将其计为当前的最小值。

答案 1 :(得分:0)

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

如果您绝对必须允许用户同时输入最小和最大年龄,那么您需要在单击“保存/完成/等”后验证整个集。为此,我会编写一个方法,按升序对整个范围进行排序,然后测试每个年龄范围(在第一个之后)的最小年龄等于它之前范围的最大年龄。