[英].ToListAsync() not found when using WhereIf
我正在閱讀本教程 。 我想與EF Core使用async
查詢。
當我使用這樣的時候它很好用:
var tasks = await _taskRepository
.GetAll()
//.WhereIf(!string.IsNullOrEmpty(input?.Title), x => x.Title.Contains(input.Title))
//.WhereIf(input?.State != null, x => x.State == input.State.Value)
//.OrderByDescending(x => x.CreationTime)
.ToListAsync();
但我想使用whereif和orderby之類的
var tasks = await _taskRepository
.GetAll()
.WhereIf(!string.IsNullOrEmpty(input?.Title), x => x.Title.Contains(input.Title))
.WhereIf(input?.State != null, x => x.State == input.State.Value)
.OrderByDescending(x => x.CreationTime)
.ToListAsync();
錯誤:
'IOrderedEnumerable'不包含'ToListAsync'的定義,並且沒有可以找到接受類型'IOrderedEnumerable'的第一個參數的擴展方法'ToListAsync'(您是否缺少using指令或程序集引用?)
您使用錯誤的WhereIf擴展名,很容易錯過,因為您需要使用Visual Studio提供的額外功能。
您正在使用返回IEnumerable的擴展名
Abp.Collections.Extensions.EnumerableExtensions.WhereIf<T>()
您需要使用返回IQueryable的擴展名
Abp.Linq.Extensions.QueryableExtensions.WhereIf<T>()
這是一個簡單的修復,只需使用Abp.Linq.Extensions添加到文件的頂部;
IOrderedEnumerable<Task>
表示您正在使用IEnumerable<Task>
。
Entity Framework Core使用IQueryable<T>
(表示數據庫查詢),而不是IEnumerable<T>
(表示內存中的集合)。 只要將IQueryable<T>
轉換為IEnumerable<T>
,就會在數據庫服務器上執行查詢並檢索結果。
所以:如果你正在調用一個返回IEnumerable<T>
方法,那么該方法不能在LINQ to Entities中使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.