В зависимости от условий я пытаюсь связать несколько предложений WHERE с переменной TransactionDataList. Посоветуйте, пожалуйста, как правильно это сделать.
Я получаю такую ошибку:
Error CS0266 Cannot implicitly convert type 'System.Collections.Generic.IEnumerable' to 'System.Collections.Generic.List'. An explicit conversion exists (are you missing a cast?)
Код:
List<Transaction> QueriedTransactionList;
QueriedTransactionList = db.Transactions.ToList();
List<TransactionViewModel> TransactionDataList = QueriedTransactionList.Select(x => new TransactionViewModel
{
TTransactionID = x.TTransactionID,
BatchID = x.BatchID,
TransactionDateTime = x.TransactionDateTime,
TransactionStatus = x.TransactionStatus,
TaxPayerName = x.Card.TaxPayer.TaxPayerName,
TaxPayerEmail = x.Card.TaxPayer.TaxPayerEmail
}).GroupBy(x => x.BatchID).Select(x => x.LastOrDefault()).OrderByDescending(x => x.TTransactionID).ToList();
if (Request.QueryString["Port"] != "")
{
int Port = Convert.ToInt32(Request.QueryString["Port"]);
TransactionDataList = TransactionDataList.Where(x => x.Card.PortID == Port);
}
if (Request.QueryString["Status"] != "")
{
string Status = Request.QueryString["Status"];
TransactionDataList = TransactionDataList.Where(x => x.TransactionStatus == Status);
}
if (Request.QueryString["TIN"] != "")
{
string TIN = Request.QueryString["TIN"];
TransactionDataList = TransactionDataList.Where(x => x.Card.TaxPayerTIN == TIN);
}





List<T> - это IEnumerable<T>, но IEnunumerable<T> не может быть включен в список. Тип возврата от Select и Where - IEnumerable<T>, и его нельзя присвоить TransactionDataList.
Изменять
List<TransactionViewModel> TransactionDataList = QueriedTransactionList.Select...
к
IEnumerable<TransactionViewModel> TransactionDataList = QueriedTransactionList.Select...
и ошибки исчезнут. Если вам нужен доступ к методам, предоставляемым IList<T>, вам нужно будет преобразовать обратно в список с помощью метода расширения ToList.
Пара примечаний: 1. Никогда не используйте
Convert.ToInt32, если вы не уверены, что значение фактически является int32. Значение Querystring содержит строки, и пользователи могут легко их изменить - это исключение, ожидающее своего часа. 2. Возможно, вы захотите переосмыслить этот подход и сначала создать предикат, и только после того, как это будет сделано, примените предложение where. Это может повысить производительность, поскольку вы будете выполнять всю фильтрацию в одном месте.