Asynchronous Where Filter with Linq

本文关键字:Linq with Filter Where Asynchronous | 更新日期: 2023-09-27 18:24:12

我有一个元素的List,它是通过WebService的async调用填充的(没有问题)。

我需要过滤该列表,以便在应用程序视图中显示一些内容。我试过这个:

List<DateTime> dates = EventsDates.Where(x => x.Day == tmp.Day && x.Month == tmp.Month && x.Year == tmp.Year).ToList();

我还尝试使用LINQ的Select函数。问题是,每当调用此代码时,EventsDates列表都没有填充,WebService还没有响应。

如何尝试异步筛选EventsDates列表?

Asynchronous Where Filter with Linq

"Where"不应该是异步的,您需要进行EventsDates填充。类似这样的东西:

EventsDates = await YourWebServiceMethodCall();
List<DateTime> dates = EventsDates.Where (x => x.Day == tmp.Day && x.Month == tmp.Month && x.Year == tmp.Year).ToList();

您可以像这样异步调用它,但正如其他人所说,在使用它之前,您需要等待eventDates来打开服务的响应。@Dmitry的回答是正确的。我把这个放在这里只是为了回答您关于如何异步使用Where的问题,以备将来需要。

using System.Data.Entity;
List<DateTime> dates = await EventsDates.Where(x => x.Day == tmp.Day && x.Month == tmp.Month && x.Year == tmp.Year).ToListAsync();

你也可以这样做:

var list = someCollection.Where(async x => x.Prop == await SomeLongRunningProcess());

看起来您不是在await中使用结果来填充EventDates

参考此Microsoft文档,您应该做的只是等待异步列表在查询后返回https://learn.microsoft.com/es-es/ef/ef6/fundamentals/testing/mocking?redirectedfrom=MSDN#testing-使用异步查询

using Microsoft.EntityFrameworkCore;
var consult =  EventsDates.Where(x => x.Day == tmp.Day && x.Month == tmp.Month && x.Year == tmp.Year)
List<DateTime> dates = await consult.ToListAsync();