Не удалось неявно преобразовать тип 'System.Collections.Generic.IEnumerable <AnonymousType # 1>' в 'System.Collections.Generic.List <modelClass>
22827 просмотра
2 ответа
Я пытаюсь заполнить данные транзакции, где AccountNumber не существует. Мне нужно получить доступ к таблице учетной записи, чтобы получить это. Я получаю следующую ошибку, когда пытаюсь вернуть IEnumerable
Невозможно неявно преобразовать тип System.Collections.Generic.IEnumerable<AnonymousType#1>
вSystem.Collections.Generic.List<ProjectModel.Transaction>
Ошибка отображается поверх .ToList (); часть кода. Что я делаю неправильно?
код:
public static IEnumerable<Transaction>GetAllTransactions()
{
List<Transaction> allTransactions = new List<Transaction>();
using (var context = new CostReportEntities())
{
allTransactions = (from t in context.Transactions
join acc in context.Accounts on t.AccountID equals acc.AccountID
where t.AccountID == acc.AccountID
select new
{
acc.AccountNumber,
t.LocalAmount
}).ToList();
}
return allTransactions;
}
Автор: shaz
Источник
Размещён: 12.11.2019 09:44
Ответы (2)
5 плюса
Список анонимных типов не может быть приведен к списку транзакций. Похоже, у вашего Transaction
класса нет AccountNumber
собственности. Также вы не можете возвращать анонимные объекты из методов. Таким образом, вы должны создать некоторый тип, который будет содержать необходимые данные:
public class AccountTransaction
{
public int LocalAmount { get; set; }
public int AccountNumber { get; set; }
}
И вернуть эти объекты:
public static IEnumerable<AccountTransaction> GetAllTransactions()
{
using (var context = new CostReportEntities())
{
return (from t in context.Transactions
join acc in context.Accounts
on t.AccountID equals acc.AccountID
select new AccountTransaction {
AccountNumber = acc.AccountNumber,
LocalAmount = t.LocalAmount
}).ToList();
}
}
Кстати, вам не нужно дублировать условие соединения в где фильтр
Автор: Sergey Berezovskiy Размещён: 12.02.2013 04:562 плюса
Анонимный тип, который вы проецируете в разделе «выберите новое» вашего запроса Linq, не может быть напрямую приведен к вашему типу «транзакция».
Вместо этого вам следует спроецировать новый экземпляр Transaction. Следующее может помочь:
allTransactions = (from t in context.Transactions
join acc in context.Accounts on t.AccountID equals acc.AccountID
where t.AccountID == acc.AccountID
select new Transaction()
{
AccountNumber = acc.AccountNumber,
LocalAmount = t.LocalAmount
}).ToList();
Автор: RainbowFish
Размещён: 12.02.2013 04:46
Вопросы из категории :
- c# Преобразовать десятичную в двойную?
- c# Как рассчитать чей-то возраст в C #?
- c# Как вы сортируете словарь по значению?
- c# В чем разница между int и Integer в Java и C #?
- c# Как создать новый экземпляр объекта из Типа
- c# Datatable против Dataset
- linq LINQ-запрос к DataTable
- linq Условные запросы Linq
- linq Конфликт данных в LINQ
- linq Есть ли способ переопределить пустой конструктор в классе, сгенерированном LINQtoSQL?
- linq Отладка LINQ to SQL SubmitChanges ()
- linq Могу ли я вернуть поле 'id' после вставки LINQ?
- linq-to-sql Entity Framework против LINQ to SQL