Я был брошен в глубину с некоторым программным обеспечением, и это связано с LINQ, с которым у меня возникают проблемы.
Задний план:
Мне нужно отобразить список платежей, связанных с организацией.
Я вытащил объект организации из базы данных следующим образом:
var orgDetails = Ctx.Organizations.Where(x => x.OrganizationId == orgID);
Затем я вытащил платежи следующим образом:
var orgPayments = (from payments in orgDetails.Select(x => x.ProcessedPayments) select payments);
Затем я хочу передать их в класс:
public class InvoiceDetails
{
public List<ProcessedPayment> ProcessedPayment { get; set; }
public List<InvoiceLineItems> InvoiceLineItems { get; set; }
}
как это:
InvoiceDetails InvoiceDetailModel = new InvoiceDetails
{
ProcessedPayment = orgPayments,
InvoiceLineItems = invoicelineitems
};
И я получаю ужасную ошибку:
LINQ Cannot implicitly convert type Generic.ICollection to Generic.List
Я просто не могу понять, что мне нужно сделать, чтобы привести его в список. Я попытался изменить его на
var orgPayments = (from payments in orgDetails.Select(x => x.ProcessedPayments) select payments).ToList();
Без везения
Может ли кто-нибудь помочь мне узнать, что я делаю неправильно?
благодаря
Ваш первый запрос дает вам список организаций, а не один, который, я считаю, является тем, что вы ищете (предполагая, что OrganizationId
является вашим основным ключом.) Посмотрите на метод Where
, он возвращает IEnumerable<>
.
Поэтому я бы изменил его на:
var orgDetails = organizations.Single(x => x.OrganizationId == orgID);
Имейте в orgID
что это вызовет исключение, если организация с orgID
не найдена, поэтому вам может потребоваться использовать SingleOrDefault
и проверить, что orgDetails != null
.
Это означает, что вам не нужен какой-либо дополнительный linq для получения платежей и вместо создания переменной orgPayments
просто используйте orgDetails.ProcessedPayments
следующим образом:
InvoiceDetails InvoiceDetailModel = new InvoiceDetails
{
ProcessedPayment = orgDetails.ProcessedPayments,
InvoiceLineItems = invoicelineitems
};
Попробуй это:
var orgPayments = orgDetails.Select(x => x.ProcessedPayments).ToList();
Кроме того, я не вижу, где вы определяете и присваиваете переменной invoiceLineItems.
var orgPayments = orgDetails.Select(x => x.ProcessedPayments).ToList()
... но вы уверены, что именно платежи вызывают проблему, а неInvoiceLineItems
?.ToList()
не сработало? Ошибка может повторяться для обоих свойств объекта, поэтому вам может понадобиться вызвать.ToList()
дляinvoicelineitems
. Кроме того, сообщение об ошибке должно указывать спецификатор типа в скобках<>
.