使用linq过滤成员的年龄

时间:2011-09-15 09:19:24

标签: c# winforms linq datetime

我正在尝试检查某个范围内的人 - 让minage和maxage对应于例如minage = 18和maxage = 24的年龄组,这意味着我试图过滤掉18到24岁之间的人。此外,成员dob的数据类型是字符串..

我正在尝试这个

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;

我不知道这种方式是否正确..

任何人都会提出任何想法......

非常感谢提前......

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:2)

通过字符串值比较日期对我来说感觉非常错误。

你说member_Dob字段的类型是string;我说你的模型有问题,应该是DateTime

如果您无法更改基础模型,请至少将其转换为代码(使用DateTime.Parse)。然后,您可以根据其他答案简单地比较where子句中的DateTime

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