【问题标题】:Display member details based on their age using LINQ and Entity Framework使用 LINQ 和实体框架根据年龄显示成员详细信息
【发布时间】:2011-09-16 09:36:31
【问题描述】:

我正在尝试检查特定年龄段的人。我有两个 ComboBoxes,minagecombobox 和 maxagecombobox,值在 1 到 120 之间。

我想得到年龄在这两个值之间的人(例如我想过滤掉年龄在 18 到 24 之间的人)。

这是成员表结构:

member_id
member_firstname
member_dob(datatype is string)

我的实体名称是 dbcontext。我正在使用实体框架和 LINQ to Entities。

【问题讨论】:

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


    【解决方案1】:

    只需计算年龄并将其与您想要的年龄间隔进行比较。年龄计算不是最好的,但作为一个例子就足够了:

    DateTime now = DateTime.Now;
    int min = 18, max = 20;
    
    var res = 
        from m in Member
        let Age = System.Data.Objects.SqlClient.SqlFunctions.DateDiff("y", t.member_dob, now)
        where Age >= min && Age <= max
        select m;
    

    【讨论】:

    • 非常感谢,但出现了类似这样的错误 notsupportedexception ......指定的方法 'System.Nullable1[System.Int32] DateDiff(System.String, System.String, System.Nullable1[System.DateTime])' 类型为 'System.Data.Objects .SqlClient.SqlFunctions' 无法转换为 LINQ to Entities 存储表达式...
    • @errorstacks 这似乎有点奇怪,因为DateDiff 函数只能与 LINQ to Entities 一起使用。
    • 您能建议任何替代解决方案
    【解决方案2】:
    DoBConverted = (Today's date - age(in years)) // in datetime
    

    会给你出生日期。

    同样,解析 DoB(字符串)以获取日期时间。

    您可以使用 min dob 和 max dob 对 dob 值进行检查以获取记录。

    int minAge = 18, maxAge=20;
    DateTime convertedMinDob = DateTime.Now.AddYears(-minAge);
    DateTime convertedMaxDob = DateTime.Now.AddYears(-maxAge);
    Console.WriteLine(convertedMinDob.ToString() + " " + convertedMaxDob.ToString());
    
    string strDate = "1/1/1995";
    DateTime actualDate = DateTime.Parse(strDate);
    
    bool valid = actualDate >= convertedMaxDob && actualDate <= convertedMinDob;
    
    Console.WriteLine(valid? "In range": "Out of range");
    

    【讨论】:

    • 您可以在实体框架中为数据类型为 datetime 的 DoB 添加一个新属性为 DateTime.Parse(member_Dob)
    • 不幸的是,我无法向实体添加任何属性,您能否建议任何其他方式来做到这一点..
    • @errorstacks,可以使用alex提供的linq查询。您不必创建属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    相关资源
    最近更新 更多