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

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

“LINQ to Entities 不支持指定的類型成員‘Date’”

“LINQ to Entities 不支持指定的類型成員‘Date’”

C#
慕姐8265434 2023-05-14 16:44:50
我開始了一個asp.net mvc項目,我想用 dynamic 過濾來自數據庫的請求數據linq/lambda。我的部分代碼如下:IQueryable<VehicleMilage> query = null;if (Fr_DeviceId == null && Fr_ContractId == null && From_Date == null && To_Date == null && From_QueryDate == null && To_QueryDate == null){    query = (db.VehicleMilage).OrderBy(x => x.Id).Skip(skip).Take(rows);}else{    query = (db.VehicleMilage);    if (Fr_DeviceId != null)    {        int a = int.Parse(Fr_DeviceId);        query = query.Where(x => x.Fr_DeviceId == a);    }    if (Fr_ContractId != null)    {        int b = int.Parse(Fr_ContractId);        query = query.Where(x => x.Fr_ContractId == b);    }    if (From_Date != null)    {        query = query.Where(x => x.From_Date.Date >= FromDate_ConvertedToDateTime1.Date);    }    if (To_Date != null)    {        query = query.Where(x => x.To_Date.Date <= ToDate_ConvertedToDateTime1.Date);    }    if (From_QueryDate != null)    {        query = query.Where(x => x.CreateDate.Date >= FromQueryDate_ConvertedToDateTime1.Date);    }    if (To_QueryDate != null)    {        query = query.Where(x => x.CreateDate.Date <= ToQueryDate_ConvertedToDateTime1.Date);    }    query = query.OrderBy(x => x.Id).Skip(skip).Take(rows);}我在數據庫中的數據至少有 2000000 條記錄,我必須將變量定義query 為IQueryable.在塊中else,我必須過濾query每個不為 null 的參數,但我遇到了錯誤LINQ to Entities 不支持指定的類型成員“Date”。query如果我定義as的變量List,那么我可以在其中的每個in 塊ToList()之前放入與 datetime 相關的內容,如下所示,但在這個項目中,由于數據量大,我不能這樣做:Whereifelsequery = query.ToList().Where(x => x.From_Date.Date >= FromDate_ConvertedToDateTime1.Date);
查看完整描述

1 回答

?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

query = query.Where(x => x.From_Date.Date >= FromDate_ConvertedToDateTime1.Date);

可以替換為:


var fromDate = FromDate_ConvertedToDateTime1.Date;

query = query.Where(x => x.From_Date >= fromDate);

它具有相同的邏輯含義,將生成高效的 SQL,并且(最重要的是)它不會遇到您所看到的錯誤。


對于小于或等于,它稍微復雜一些 - 但并不明顯。


query = query.Where(x => x.To_Date.Date <= ToDate_ConvertedToDateTime1.Date);

可以替換為:


var dayAfterToDate = ToDate_ConvertedToDateTime1.Date.AddDays(1)

query = query.Where(x => x.To_Date < dateAfterToDate);

該邏輯乍一看似乎很奇怪 - 但如果它在ToDate 之后的日期之前,在邏輯上等同于在ToDate上或之前(忽略時間組件)。


對其他查詢重復相同的過程——它們將遵循完全相同的模式。


查看完整回答
反對 回復 2023-05-14
  • 1 回答
  • 0 關注
  • 137 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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