2011-09-15 77 views
2

我想检查某个范围内的人 - 让minage和maxage对应于年龄组MINAGE = 18,最大生存周期= 24的意思,我想筛选出18岁至24.Also数据类型成员的出生日期是字符串之间的人..最后的成员年龄不是workng

我试图此

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到实体不支持该行

let dob = DateTime.Parse(report.member_Dob) // or use ParseExact 

不幸的是member_dob数据类型为字符串,我不能更改架构...

会不会有人请给任何想法这样做...

+0

你不能改变的模式,但你能添加一个函数的数据库? – Tipx

+1

我可能会在该表中的数据库中创建一个视图,将该字符串转换为日期,并将该视图添加到linq上下文文件中。 – Magnus

回答

0

如果你不介意被这种表达所产生和你所有的字符串值都有效日期时间的,你可以做到这一点的SQL:

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; 
+0

你确定这可以吗? – Magnus

+0

@Magnus - 这只有在所有字符串都可以转换为所需类型时才有效。它将与整数,双精度和日期时间 – Aducci

+0

好。尽管 – Magnus