我有一個簡單的查詢,但它拋出,無法翻譯
這是功能
public async Task<Voucher> Get(Predicate<Voucher> predicate)
{
try
{
var voucher = await _promotionCoreContext.Vouchers.AsNoTracking().FirstOrDefaultAsync(i => predicate(i));
return voucher;
}
catch (Exception ex)
{
_logger.LogError(ex.Message);
}
}
用法是這樣的:
repository.Get(c => c.Code == "abc");
但由于某種原因,它不能翻譯謂詞,但它可以編譯。
---- System.InvalidOperationException:無法翻譯 LINQ 運算式 'DbSet() .Where(v => Invoke(__predicate_0, v) )'。以可翻譯的形式重寫查詢,或通過插入對“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的呼叫顯式切換到客戶端評估。有關詳細資訊,請參閱
任何人都知道如何在不使用 ToList() 使其成為客戶端的情況下解決此問題
uj5u.com熱心網友回復:
IQueryable.FirstOrDefaultAsync采用,而
Expression<Func<TSource,bool>>不是Func<TSource,bool>. Enumerable擴展方法可以與 一起使用,Func<TSource,bool>但由于這基本上是一個函式指標,EF 無法將其轉換為 SQL。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/426627.html

