使用任务时如何return基于linq的查询windowsphone8.1

How to return a query based on linq when using a task windows phone 8.1

我是任务的新手,我想弄清楚如何对从 aync 方法返回的列表进行查询,通常我会做这样的事情,因为 obv linq 不是异步方法如何实现这有点儿

List<MovieDetail> _mySearchDetail = _myMovie.Where(p => p.name == movietitle).ToList(); 

但是导致它从一个不起作用的任务中重新调整我的两种方法如下。

这从网络服务获取电影详细信息

public async Task<List<MovieDetail>> GetMovieDetailsList(int movieId)
{

        var tcs = new TaskCompletionSource<List<MovieDetail>>();
        string jsonresult = await WCFRESTServiceCall("GET", "movie_details");

        var list = await Task.Run(() => jsonresult.Deserialize<MovieDetails>());
        tcs.SetResult(list.movieDetaillist);
        // for testing to show json being returned
        var dialog = new MessageDialog(jsonresult);
        await dialog.ShowAsync();

        return await tcs.Task;
}

然后我想做的是建立一个搜索功能,让我可以按名称、描述、演员等等搜索电影。

public Task<List<MovieDetail>> searchMovies(string movietitle)
{
        List <MovieDetail> _myMovie = await GetMovieDetailsList(1);
        var list = await Task.Run(() => how do i query above here ???? >());


        List<MovieDetail> _mySearchDetail = _myMovie.Where(p => p.name == movietitle).ToList();

        return await tcs.Task;
}

为了代码的完整性,我已经包含了我的电影详细信息 class:

public class MovieDetail
{
    public string id { get; set; }
    public string name { get; set; }
    public string description { get; set; }
    public string image { get; set; }
    public string secondry_images { get; set; }
    public string actor { get; set; }
    public string actoress { get; set; }
    public string director { get; set; }
    public string music_director { get; set; }
    public string release_date { get; set; }
    public string tags { get; set; }
    public string age_restriction { get; set; }
    public string box_office { get; set; }
    public string official_site { get; set; }
    public string duration { get; set; }
    public string writers { get; set; }
    public int imdb { get; set; }
    public string status { get; set; }
    public string language { get; set; }
    public string created { get; set; }
    public string modified { get; set; }
    public string movie_category_id { get; set; }
    public string slug { get; set; }
    public string movie_show_time_id { get; set; }
    public string theatre_movie_screen_id { get; set; }
    public string videous { get; set; }
    public string videos { get; set; }
    public string comming_soon { get; set; }
    public string avg { get; set; }
}

 public class MovieDetails
{
    public List<MovieDetail> movieDetaillist { get; set; } 
}

为什么在 GetMovieDetailsList 中使用 TaskCompletionSource

我会这样做:

public async Task<List<MovieDetail>> GetMovieDetailsList(int movieId)
{   
        string jsonresult = await WCFRESTServiceCall("GET", "movie_details");    
        var list = jsonresult.Deserialize<MovieDetails>();
        return list.movieDetaillist;
}

您的 searchMovies 方法可能如下所示:

public async Task<List<MovieDetail>> searchMovies(string movietitle)
{
        List <MovieDetail> _myMovie = await GetMovieDetailsList(1);
        var list = _myMovie.Where(p => p.name == movietitle).ToList();    
        return list;
}

await时间贵的东西。 如何 获得列表并不重要。你忘记了这个列表是在你得到它之后建立在一个任务中的。您可以像查询其他列表一样查询它。

在你的第一个等待的电话之后,你有结果,所以你可以做

public Task<List<MovieDetail>> searchMovies(string movietitle)
{
        List <MovieDetail> _myMovie = await GetMovieDetailsList(1);
        var list = await Task.Run(() => how do i query above here ???? >());


        List<MovieDetail> _mySearchDetail = _myMovie.Where(p => p.name == movietitle).ToList();
            return await tcs.Task;
}


_myMovie.Where(x => x.Name == "title"); 

或您要搜索的任何属性