Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# (代码完成)合并两个任务列表(表)以显示总结果_C#_Asp.net Core - Fatal编程技术网

C# (代码完成)合并两个任务列表(表)以显示总结果

C# (代码完成)合并两个任务列表(表)以显示总结果,c#,asp.net-core,C#,Asp.net Core,今天,我试图实现一些我在代码完成方面遇到困难的事情。 我正在尝试合并两个任务(来自不同类型) 在到达这里之前,我已经尝试了几个场景。。。。使用WhenAll组合任务(我不能这样做,因为两个任务不同) 代码的最后一部分(最后3行)不正确,我将询问是否有人可以看一下:)(如果方法参数在这方面没有问题)。我只想返回由这两个任务组合而成的总行列表 提前谢谢!(代码如下) 您必须等待一个任务对象。这将“展开”结果: public async (List<ApplyPerfectMatches>

今天,我试图实现一些我在代码完成方面遇到困难的事情。 我正在尝试合并两个任务(来自不同类型)

在到达这里之前,我已经尝试了几个场景。。。。使用WhenAll组合任务(我不能这样做,因为两个任务不同)

代码的最后一部分(最后3行)不正确,我将询问是否有人可以看一下:)(如果方法参数在这方面没有问题)。我只想返回由这两个任务组合而成的总行列表

提前谢谢!(代码如下)


您必须等待
一个
任务
对象。这将“展开”结果:

public async (List<ApplyPerfectMatches> PerfectMatches, List<ApplyNonPerfectMatches> NonApplyPerfectMatches) GetMatchesAsync(string currentUser)
{
  List<ApplyPerfectMatches> listPerfectMatches = await _context.ApplyPerfectMatches
    .Where(x => x.IdEmailInvestor == currentUser)
    .Take(3)
    .AsNoTracking()
    .ToListAsync();

  List<ApplyNonPerfectMatches> listNonPerfectMatches = await _context.ApplyNonPerfectMatches
    .Where(x => x.IdEmailInvestor == currentUser)
    .AsNoTracking()
    .ToListAsync();

  return (listPerfectMatches, listNonPerfectMatches);   
}

async Task Run()
{
  (List<ApplyPerfectMatches> PerfectMatches, List<ApplyNonPerfectMatches> NonApplyPerfectMatches) result = await GetMatchesAsync("Admin");
}
public async(列出PerfectMatches,列出NonApplyPerfectMatches)GetMatchesAsync(字符串currentUser)
{
List listPerfectMatches=Wait_context.ApplyPerfectMatches
.Where(x=>x.IdEmailInvestor==currentUser)
.采取(3)
.AsNoTracking()
.ToListAsync();
List listNonPerfectMatches=Wait\u context.ApplyNonPerfectMatches
.Where(x=>x.IdEmailInvestor==currentUser)
.AsNoTracking()
.ToListAsync();
返回(listPerfectMatches、listNonPerfectMatches);
}
异步任务运行()
{
(列出完美匹配,列出非应用完美匹配)结果=等待GetMatchesAsync(“管理”);
}

直接访问
Task.Result
会导致死锁
QueryableExtensions.ToListSync
是一种异步方法。异步方法总是返回一个
任务
任务
,并且必须使用
等待
等待才能异步执行。

首先,您需要定义一个新类:

public class GetMatchesResult {
   public string IdEmailInvestor { set; get; }
   public bool IsPerfectMatch { set; get; }
   ... rest of properties/columns go here
}
因为您的方法定义为

async Task<(ApplyPerfectMatches, ApplyNonPerfectMatches)>
您需要对listNonPerfectMatches执行相同的操作,但是将IsPerfectMatch设置为false

最后,您可以执行以下操作:

return listPerfectMatches.Concat(listNonPerfectMatches);

很不清楚你在问什么。您不能像正在尝试的那样合并结果,因为这两个列表的类型不同。您正在尝试返回任务中包装的元组吗?然后您应该尝试:“return Task.FromResult((listPerfectMatches,listNonPerfectMatches));”但是,在执行此操作之前,您需要等待ToListSync()调用…@GorgiRankovski对此表示抱歉。我想要两个列表的结果。我已经按照您的建议做了,但返回行中有一个错误。我认为是方法参数-->公共异步任务GetMatchesAsync(string currentUser)对不起,正确的代码应该是:“return(ApplyPerfectMatches,ApplyNonPerfectMatches);”。请确保等待您的所有ToListSync行。谢谢您的回答,但我在返回时遇到了问题,因为在您声明列表时,我必须指定对象。我需要为两个列表指定对象,它们来自不同的输出。你是什么意思?它是
对象的列表
。您可以将
对象
替换为实际类型的课程。我不知道真正的类型。两个列表都有不同的类型,这就是我在返回行中出错的原因。抱歉,如果我不清楚,我讨厌这样的情况如果两个列表都有不同的类型,则无法将它们连接起来。您必须单独返回它们(现在我知道返回类型签名中的元组是用于什么的)。我将更新示例。很好,您自己找到了解决方案。否则,您可以将这两种类型包装成新类型,例如
MatchResult
。因此,您的方法将返回一组
IEnumerable
。感谢您的解释,我的目标是返回两个列表中合并的总结果列表。您需要返回两个单独的列表吗?然后查看我的更新答案@SergioVitalRebeloI想要返回一个两者结合的列表。但我似乎不能把两种不同的类型结合起来。所有这些都将来自同一个视图的两个不同输出联合起来。lol。该死的,我需要思考…@SergioVitalRebelo问题是你将如何在另一边使用结果?您可能需要创建一个包含所需属性和布尔属性IsPerfectMatch的新类。然后,您需要将两个列表中的结果映射到同一类型,然后您可以将两个映射的列表合并为一个列表并返回结果。我希望您能为您的用例推断出正确的实现。
async Task<(ApplyPerfectMatches, ApplyNonPerfectMatches)>
async Task<List<GetMatchesResult>> GetMatches
 // Perfect Matches
 var listPerfectMatches = await _context.ApplyPerfectMatches
     .Where(x => x.IdEmailInvestor == currentUser)
     .Select(x => new GetMatchesResult {
         IdEmailInvestor = x.IdEmailInvestor,
         IsPerfectMatch = true,
         ... rest of properties go here
     })
     // Use ToListAsync to avoid blocking a thread
     .ToListAsync();
                     
return listPerfectMatches.Concat(listNonPerfectMatches);