Glory Raj
Glory Raj

Reputation: 17701

filtering age of members using linq

I am trying to check for people in a certain range - let minage and maxage corresponding for e.g. age group with minage=18 and maxage =24 meaning I am trying to filter out the people aged between 18 and 24.Also datatype for dob of member is string ..

i am trying this

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;

i dont know is this way is correct or not ..

would any pls suggest any idea ..

many thanks in advance...

Upvotes: 0

Views: 863

Answers (2)

Muhammad Hasan Khan
Muhammad Hasan Khan

Reputation: 35136

    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);

EDIT: Query comprehension is as under

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

Upvotes: 3

jeroenh
jeroenh

Reputation: 26782

Comparing dates via their string value feels horridly wrong to me.

You say the type of the member_Dob field is string; I'd say there is something wrong with your model, it should be DateTime

If you can't change the underlying model, at least convert it in code (using DateTime.Parse). Then you can simply compare DateTimes in your where clause as per the other answers:

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

Upvotes: 2

Related Questions