[英]How to properly convert a list to IQueryable on a asp net core web API
我正在嘗試部署一個使用簡單標簽系統的簡單搜索功能,可能有更好的方法可以解決這個問題,這是我找到的解決方案:
public async Task<ActionResult<IEnumerable<t_usuarios_pub>>> Gett_usuarios_pubByTag(string tag)
{
string[] TagList;
TagList = tag.Split(',');
List<t_usuarios_pub> results = new List<t_usuarios_pub>();
var pubs = from m in _context.t_usuarios_pub select m;
if (!String.IsNullOrEmpty(tag))
{
foreach (var Itag in TagList)
{
pubs = pubs.Where(s => (s.tag.Contains(Itag) && s.estatus<2)).OrderBy(x => x.estatus);
foreach(var x in pubs)
{
if (!results.Contains(x))
{
results.Add(x);
}
}
}
}
return await results.AsQueryable().ToListAsync();
}
問題是List結果無法轉換為IQueryable,這是錯誤堆棧。 知道如何正確實施它嗎?
System.InvalidOperationException:
The source 'IQueryable' doesn't implement 'IAsyncEnumerable<UserPostAPI.Models.t_usuarios_pub>'.
Only sources that implement 'IAsyncEnumerable' can be used for Entity Framework asynchronous operations.
´´´
由於results
是List<>
類型的局部變量,我認為您不需要等待最后一行。 它可能只適用於:
return results.AsQueryable();
在這種情況下,您的方法甚至可能不需要是async
方法。 或者,根據_context
是什么,也許await
需要在pubs
過濾器調用中:
pubs = await pubs.Where(s => (s.tag.Contains(Itag) && s.estatus<2))
.OrderBy(x => x.estatus)
.ToListAsync();
此外,由於您的方法說它返回一個IEnumerable<>
,您可能不需要.AsQueryable()
,或者:
return result;
您還可以進行很多重構——以下是您可能需要考慮的一些事項:
String.IsNullOrEmpty(tag)
檢查移到方法的開頭作為保護。TagList
的拆分標簽以避免任何額外空白的問題,然后確保刪除任何由此產生的空成員。estatus < 2
檢查放在您的查詢中,以減少必須為每個ITag
pubs
每個項目再次重新檢查它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.