亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

LINQ to Entities不支持指定的類型成員。僅支持初始值設定項,實體成員和實體導航屬性

LINQ to Entities不支持指定的類型成員。僅支持初始值設定項,實體成員和實體導航屬性

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);}我在這里得到一個例外:LINQ to Entities不支持指定的類型成員“Age”。僅支持初始值設定項,實體成員和實體導航屬性。如果Age不在數據庫中,則是我在clsProfileDate類中創建的屬性,用于從DOB計算Age。對此有何解決方案?
查看完整描述

3 回答

?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

您不能使用未映射到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));


查看完整回答
反對 回復 2019-08-28
?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

很多人都會說這是一個錯誤的答案,因為這不是最佳實踐,但你也可以在你的位置之前將其轉換為List。

result = result.ToList().Where(p => date >= p.DOB);

Slauma的答案更好,但這也可行。這會花費更多,因為ToList()將對數據庫執行查詢并將結果移動到內存中。


查看完整回答
反對 回復 2019-08-28
  • 3 回答
  • 0 關注
  • 2178 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號