簡體   English   中英

使用WhereIf時未找到.ToListAsync()

[英].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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM