首页 > 解决方案 > 如何将 List 值分配给 List ValueTuples?

问题描述

我有返回 List 的方法,我想尝试从另一个标准列表中填充 ValueTuple 我收到错误:

无法将类型“System.Collections.Generic.List<(long PaymentId, long TransactionId)>”隐式转换为“System.Collections.Generic.List>”

代码如下所示:

public async Task<List<ValueTuple<(long, long)>>> CreditTransactionAsync(CancellationToken cancellationToken)
{
 List<(long PaymentId, long TransactionId)> paymentTransactionList = new List<ValueTuple<long, long>>();

 var paymentTransactions = _dbContext.PaymentTransactions
                                .AsEnumerable()
                                .Where(x => transactionIdsList.Any(a => a.TransactionId == x.TransactionId))
                                .Select(x => new
                                 {
                                   PaymentId = x.PaymentId,
                                   TransactionId = x.TransactionId
                                 })
                                .ToList();
// This line shows error..
 paymentTransactionList = paymentTransactions.Select(x => (PaymentId: x.PaymentId, TransactionId: x.TransactionId));

 return paymentTransactionList;
}

标签: c#valuetuple

解决方案


您可以Select稍微重写您的语句并将事务(long, long)直接映射到元组列表,而无需中间匿名类型

.Select(x => (x.PaymentId, x.TransactionId))

完整代码

var paymentTransactions = _dbContext.PaymentTransactions
                                .AsEnumerable()
                                .Where(x => transactionIdsList.Any(a => a.TransactionId == x.TransactionId))
                                .Select(x => (x.PaymentId, x.TransactionId))
                                .ToList();
return paymentTransactions;

您还应该正确声明方法的返回类型,例如Task<List<(long paymentId, long transactionId)>>


推荐阅读