终于会员年龄不工作了

Posted

技术标签:

【中文标题】终于会员年龄不工作了【英文标题】:finally the member age is not workng 【发布时间】:2011-11-18 00:07:20 【问题描述】:

我正在尝试检查某个范围内的人 - 让 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 entity 不支持这一行

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

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

有没有人能给出这样做的任何想法...

【问题讨论】:

你不能改变架构,但是你能在数据库中添加一个函数吗? 我可能会在该表的数据库中创建一个视图,将字符串转换为日期,然后将该视图添加到 linq 上下文文件中。 【参考方案1】:

看看这个帖子Linq to Entities DateTime Conversion

我认为它有您正在寻找的答案。

【讨论】:

【参考方案2】:

如果您不介意此表达式生成的 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;

【讨论】:

@Magnus - 这仅在所有字符串都可以转换为所需类型时才有效。它适用于整数、双精度和日期时间 @Magnus - 实体框架允许转换可枚举序列,但不能转换单个值。所以我正在创建一个只有我想要的项目的可枚举,将其转换,然后将其作为值返回 eclipse.members.Take(1) 总是取相同的值?而不是您选择x 并且从不使用它? @Magnus - 我只是用它来创建一个 Enumerable,我只对将 report.member_Dob 转换为 DateTime 感兴趣。理想情况下我可以做到 DateTime.Parse(report.member_Dob),但 EF 不支持它

以上是关于终于会员年龄不工作了的主要内容,如果未能解决你的问题,请参考以下文章

sql server 主键与外键约束无法创建

贝宝订阅按钮升级会员资格

网站上付费会员的计划工作流程是啥?

MVC 简单会员网站管理工具

会员积分体系设计思路(转)

现在都是数据时代,谁还充会员!Python爆破某会员网站!不花钱