2011-09-15 61 views
0

我試圖檢查某個範圍內的人 - 讓minage和maxage對應於年齡組MINAGE = 18,最大生存週期= 24的意思,我想篩選出18歲至24.Also數據類型成員的出生日期是字符串之間的人..使用linq過濾成員的年齡

我試圖此

int agefrom = Convert.ToInt32(cbGEFrom.Text); 
int ageto = Convert.ToInt32(cbGETo.Text); 
DateTime today = DateTime.Today; 
DateTime max = today.AddYears(-(agefrom + 1)); 
DateTime min = today.AddYears(-(ageto)); 
string maxage = Convert.ToString(max); 
string minage = Convert.ToString(min); 

var members = 
    from report in eclipse.members 
    where string.Compare(report.member_Dob,minage) >=0 
    where string.Compare(report.member_Dob,maxage) < 0 
    select report; 

我不知道是這種方式是否正確或不..

將任何請提出任何想法..

許多在此先感謝...

+6

爲什麼你不測試你的代碼? – Carsten

回答

3
int agefrom = Convert.ToInt32(cbGEFrom.Text); 
    int ageto = Convert.ToInt32(cbGETo.Text); 

    DateTime today = DateTime.Today; 
    DateTime maxDOB = today.AddYears(-ageTo); 
    DateTime minDOB = today.AddYears(-ageFrom); 

    var members = eclipse.members.Where(m=>m.member_Dob>=minDOB && m.member_Dob<=maxDOB); 

編輯:查詢理解是下

var members = from member in eclipse.members 
        where member.member_Dob>=minDOB && member.member_Dob<=maxDOB 
        select member; 
+0

你會提出任何解決方案與LINQ ......不使用lambda表達式.. –

+3

使用LINQ和**不**使用Lambda表達式?! – alex

+0

@ errorcode105添加了查詢理解。兩者都被稱爲linq btw。 –

2

通過其字符串值比較日期感到horridly我錯了。

你說member_Dob字段的類型是string;我想說你的模型出了問題,應該是DateTime

如果你不能改變底層模型,至少要用代碼轉換它(使用DateTime.Parse)。然後你可以根據其他答案簡單地比較DateTime s中的where子句:

var members = from report in eclipse.members 
      let dob = DateTime.Parse(report.member_Dob) // or use ParseExact 
      where dob >= minDOB && dob < maxDOB 
      select report; 
+0

非常感謝它的工作現在... –