Не удалось неявно преобразовать тип 'System.Collections.Generic.IEnumerable <AnonymousType # 1>' в 'System.Collections.Generic.List <modelClass>

c# linq linq-to-sql

22827 просмотра

2 ответа

805 Репутация автора

Я пытаюсь заполнить данные транзакции, где 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.02.2013 04:36

Ответы (2)


2 плюса

625 Репутация автора

Анонимный тип, который вы проецируете в разделе «выберите новое» вашего запроса 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

5 плюса

197063 Репутация автора

Решение

Список анонимных типов не может быть приведен к списку транзакций. Похоже, у вашего 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:56
32x32