2015-05-15 27 views
0

我试图创建维护页面,管理员可以创建/修改/删除的年龄范围将其显示在页面上为客户选择他们的年龄范围进行编程。如何与年龄(或任何其他)范围

年龄范围

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 

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

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

谢谢

+1

既然它没有意义,允许差距,你可能重新设计这个存储停止,而不是范围。例如, {20,40,60} =>自动表示1-20,21-40,41-60,> = 61。 – KekuSemau

+0

完全像Keku说的。这是一个设计问题,不是一个真正的编程问题。改变用户界面只接受停止,用户永远不会有年龄差距的问题。 –

+0

“停止”是什么意思? – Computer

回答

2

一种可能性可能是有一个“最大年龄”字段。您的已经存在的一系列检查变得更简单:

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

你也没有必要担心留下范围之间的差距(因为这会被自动填写)。

留给你的是在UI中,渲染你的“最小 - 最大”列表中的唯一的问题值。然而,编写几行代码应该相对简单,对于任何给定的AgeRange,找到“次最低”AgeRange的最大年龄,将它加1并将其计为当前最小值。

+0

不确定单个最大年龄段的含义?如果我是管理员,我可以输入1-20和21-40 ....第二天,我进来并可能想要将1-20更改为1-10,剩下的余数(这留下了11-20之间的差距)。也许你有正确的答案,但我可以看看什么样的例子来解决这个问题? Thx – Computer

+0

@computer你的'1-20','21-40','41-60'的范围,因此只会成为最大年龄的列表 - 20','40','60'等。每个的最小值只是它们是范围列表中次高的最大值。 –

0

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

如果您绝对必须允许用户输入最小和最大年龄,那么你想要验证整个集合,一旦他们点击保存/完成/等。为此,我会编写一种方法,按升序对整组范围进行排序,然后测试每个年龄范围(在第一个之后)的最小年龄等于其之前范围的最大年龄。