我正在尝试检查某个范围内的人 - 让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;
我不知道这种方式是否正确..
任何人都会提出任何想法......
非常感谢提前......
答案 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;