我正在尝试检查某个范围内的人 - 让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;
我在下面尝试了这个
var members = from report in eclipse.members
let dob = DateTime.Parse(report.member_Dob) // or use ParseExact
where dob >= minDOB && dob < maxDOB
select report;
但linq to entities不支持此行
let dob = DateTime.Parse(report.member_Dob) // or use ParseExact
遗憾的是,member_dob的数据类型是字符串,我无法更改架构......
任何人都会有任何想法这样做......
答案 0 :(得分:0)
看一下这篇文章Linq to Entities DateTime Conversion
我认为它有你想要的答案。
答案 1 :(得分:0)
如果你不介意这个表达式生成的sql并且你的所有字符串值都是有效的DateTime,你可以这样做:
var members = from report in eclipse.members
let dob = eclipse.members.Take(1).Select(x => report.member_Dob).Cast<DateTime>().FirstOrDefault()
where dob >= minDOB && dob < maxDOB
select report;