最后,会员年龄不起作用

时间:2011-09-15 15:29:33

标签: c# entity-framework linq-to-entities

我正在尝试检查某个范围内的人 - 让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的数据类型是字符串,我无法更改架构......

任何人都会有任何想法这样做......

2 个答案:

答案 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;