LINQ Невозможно неявно преобразовать тип Generic.ICollection в Generic.List

1

Я был брошен в глубину с некоторым программным обеспечением, и это связано с 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();

Без везения

Может ли кто-нибудь помочь мне узнать, что я делаю неправильно?

благодаря

  • 4
    Непонятно, почему вы вообще используете выражение запроса, а не просто var orgPayments = orgDetails.Select(x => x.ProcessedPayments).ToList() ... но вы уверены, что именно платежи вызывают проблему, а не InvoiceLineItems ?
  • 2
    Вы уверены, что добавление .ToList() не сработало? Ошибка может повторяться для обоих свойств объекта, поэтому вам может понадобиться вызвать .ToList() для invoicelineitems . Кроме того, сообщение об ошибке должно указывать спецификатор типа в скобках <> .
Показать ещё 3 комментария
Теги:
linq

2 ответа

3
Лучший ответ

Ваш первый запрос дает вам список организаций, а не один, который, я считаю, является тем, что вы ищете (предполагая, что 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
};
  • 0
    Я закончил с ProcessedPayment = orgDetails.ProcessedPayments.ToList (), спасибо, что нашли время, чтобы помочь мне :)
-4

Попробуй это:

var orgPayments = orgDetails.Select(x => x.ProcessedPayments).ToList();

Кроме того, я не вижу, где вы определяете и присваиваете переменной invoiceLineItems.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню