2015-05-15 35 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)

如果您絕對必須允許用戶輸入最小和最大年齡,那麼你想要驗證整個集合,一旦他們點擊保存/完成/等。爲此,我會編寫一種方法,按升序對整組範圍進行排序,然後測試每個年齡範圍(在第一個之後)的最小年齡等於其之前範圍的最大年齡。