entity-framework-4 - LINQ to Entities 不支持指定的类型成员。仅支持初始值设定项、实体成员和实体导航属性

标签 entity-framework-4 linq-to-entities

var result =
    (from bd in context.tblBasicDetails
     from pd in context.tblPersonalDetails.Where(x => x.UserId == bd.UserId).DefaultIfEmpty()
     from opd in context.tblOtherPersonalDetails.Where(x => x.UserId == bd.UserId).DefaultIfEmpty()
     select new clsProfileDate()
     {
         DOB = pd.DOB
     });

foreach (clsProfileDate prod in result)
{
    prod.dtDOB = !string.IsNullOrEmpty(prod.DOB) ? Convert.ToDateTime(prod.DOB) : DateTime.Today;
    int now = int.Parse(DateTime.Today.ToString("yyyyMMdd"));
    int dob = int.Parse(prod.dtDOB.ToString("yyyyMMdd"));
    string dif = (now - dob).ToString();
    string age = "0";
    if (dif.Length > 4)
    age = dif.Substring(0, dif.Length - 4);
    prod.Age = Convert.ToInt32(age);
}

GetFinalResult(result);
<小时/>
protected void GetFinalResult(IQueryable<clsProfileDate> result)
{
    int from;
    bool bfrom = Int32.TryParse(ddlAgeFrom.SelectedValue, out from);
    int to;
    bool bto = Int32.TryParse(ddlAgeTo.SelectedValue, out to);

    result = result.AsQueryable().Where(p => p.Age >= from);
}

这里我遇到了一个异常(exception):

The specified type member "Age" is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

年龄不在数据库中,它是我在 clsProfileDate 类中创建的属性,用于根据出生日期计算年龄。有什么解决办法吗?

最佳答案

您不能在 Where 表达式中使用未映射到数据库列的属性。您必须基于映射的属性构建表达式,例如:

var date = DateTime.Now.AddYears(-from);
result = result.Where(p => date >= p.DOB);
// you don't need `AsQueryable()` here because result is an `IQueryable` anyway

作为未映射的 Age 属性的替代,您可以将此表达式提取到静态方法中,如下所示:

public class clsProfileDate
{
    // ...
    public DateTime DOB { get; set; } // property mapped to DB table column

    public static Expression<Func<clsProfileDate, bool>> IsOlderThan(int age)
    {
        var date = DateTime.Now.AddYears(-age);
        return p => date >= p.DOB;
    }
}

然后这样使用它:

result = result.Where(clsProfileDate.IsOlderThan(from));

关于entity-framework-4 - LINQ to Entities 不支持指定的类型成员。仅支持初始值设定项、实体成员和实体导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42128210/

相关文章:

c# - LINQ to Entities - 比较日期

c# - 在 C# 中从模型自动生成好友类

c# - System.String[] Split(Char[])' 方法无法识别

c# - 如何逐步构建 LINQ => SQL/entities 查询(带联接)?

c# - EF 4.0进行批量查询以获取结果集的计数,但仅返回前5条记录

c# - 避免在 Entity Framework 中重复投影代码

entity-framework-4 - 如何将 Entity Framework 中的 DbSet 转换为 ObjectQuery

c# - Entity Framework 连接字符串 utf8

c#-4.0 - 我没有 EF savechanges 过载,并且没有可用的 Acceptallchanges

linq - 匿名 linq 查询 select 的返回类型是什么?发回这些数据的最佳方式是什么?