第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

表達(dá)式中的 EF Core 3 x.Contains(),其中 x 是 ICollection

表達(dá)式中的 EF Core 3 x.Contains(),其中 x 是 ICollection

PHP
Smart貓小萌 2024-01-20 21:40:23
我有以下數(shù)據(jù)層設(shè)置:public class Repository : IRepository {    private readonly MyDbContext _dbContext;        public List<Meter> Search(Expression<Func<Meter,bool>> criteria)            IQueryable<Meter> results = _dbContext.Meters;            return results.Where(criteria).ToList();        }    }}... from a client class:IRepository _repository;public void ClientMethod () {    ICollection<int> ids = new List<int>() {1, 2, 3);    var results = _repository.Search(c=> ids.Contains(c.Id)); // This throws exception}這會導(dǎo)致異常:表達(dá)式Where(源:DbSet,謂詞:(m) => (未處理的參數(shù):__ids_0).Contains(m.Id))' 無法翻譯。以可翻譯的形式重寫查詢,或者通過插入對 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的調(diào)用來顯式切換到客戶端計算但如果我將集合引用更改為 IEnumerable 或 List,它就會起作用:public void ClientMethod () {    // This works    List<int> ids = new List<int>() {1, 2, 3);    var results = _repository.Search(c=> ids.Contains(c.Id));     // This works    IEnumerable<int> ids = new List<int>() {1, 2, 3);    var results = _repository.Search(c=> ids.Contains(c.Id)); }為什么它不適用于 ICollection,但適用于 IEnumerable 和 List?我的許多客戶端方法都采用 ICollection 作為參數(shù)。我正在使用 EF Core 3.0,但我相信我在 2.1 中遇到了同樣的問題,它只是沒有拋出,因為它在客戶端上對其進(jìn)行了評估。
查看完整描述

3 回答

?
當(dāng)年話下

TA貢獻(xiàn)1890條經(jīng)驗 獲得超9個贊

這是 3.1 中修復(fù)的已知錯誤。由于查詢管道重寫后的所有回歸,3.0 幾乎無法使用。

我建議關(guān)注 ef core 的 github 上的問題跟蹤器。

https://github.com/dotnet/efcore/pull/17599


查看完整回答
反對 回復(fù) 2024-01-20
?
UYOU

TA貢獻(xiàn)1878條經(jīng)驗 獲得超4個贊

從 2.2 遷移到 EF Core 3.0 時,我遇到了同樣的問題。我之前已經(jīng)配置了 ef 以在客戶端評估時拋出錯誤,并且工作正常。所以我確信這是 3.0 的一個新問題,是他們重寫 linq 引擎時引入的。

將其轉(zhuǎn)換為 IEnumerable 或 List 對我也適用,感謝您的提示!


查看完整回答
反對 回復(fù) 2024-01-20
?
慕妹3146593

TA貢獻(xiàn)1820條經(jīng)驗 獲得超9個贊

當(dāng)您轉(zhuǎn)換為 IEnumerable() 或 List() 時,EFCore 會強(qiáng)制客戶端評估,這就是它起作用的原因。(但以性能成本為代價)

  • “在版本 3.0 之前,Entity Framework Core 支持查詢中任意位置的客戶端評估”

  • 3.0 之前的 EFCore 版本還允許您在混合服務(wù)器和客戶端評估時添加警告。

  • 然后 EF 更改了策略,不允許混合服務(wù)器和客戶端評估,因此不會發(fā)生意外的性能問題。不過,情況比這要復(fù)雜一些,因此這里是EFCore 3.1 重大更改的鏈接*所有其他版本也可以在此處以及左側(cè)菜單導(dǎo)航中找到,包括 3.0。


查看完整回答
反對 回復(fù) 2024-01-20
  • 3 回答
  • 0 關(guān)注
  • 188 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號