LINQ to Entities不支持指定的types成员。 仅支持初始化器,实体成员和实体导航属性
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); }
在这里我得到一个例外:
指定的types成员“Age”在LINQ to Entities中不受支持。 仅支持初始化器,实体成员和实体导航属性。
年龄不在数据库中,它是我在clsProfileDate类中创build的属性,用于从DOB计算年龄。 任何解决scheme?
您不能使用未映射到Where
expression式中的数据库列的属性。 您必须根据映射的属性构buildexpression式,如:
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
属性的替代品,你可以将这个expression式提取成静态方法,如下所示:
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));
很多人会说这是一个不好的答案,因为这不是最好的做法,但你也可以把它转换成一个列表之前,你的位置。
result = result.ToList().Where(p => date >= p.DOB);
Slauma的答案是更好的,但是这也会起作用。 这个代价更大,因为ToList()将针对数据库执行查询并将结果移入内存。
当您不小心忘记为属性定义setter时,您也会收到此错误消息。 例如:
public class Building { public string Description { get; } } var query = from building in context.Buildings select new { Desc = building.Description }; int count = query.ToList();
对ToList的调用会给出相同的错误信息。 这是一个非常微妙的错误,很难发现。
- 使用System.ComponentModel.DataAnnotations与entity framework4.0
- 将EF 4 EDMX升级到EF 6
- 更好的方式来查询一个页面的数据,并获得总数在entity framework4.1?
- EF包括其他实体(通用存储库模式)
- 指定的命名连接在configuration中找不到,不打算与EntityClient提供程序一起使用,或者无效
- 为什么我得到这个错误:没有为以下EntitySet / AssociationSet – Entity1指定的映射?
- 该对象不能被删除,因为它在ObjectStateManager中找不到
- 如何为DbContext设置CommandTimeout?
- entity framework – 无效的列名“* _ID”