6

我正在尝试填充 AccountNumber 不存在的交易数据。我需要访问 Account 表来获得它。我在尝试返回 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;

    }
4

2 回答 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();
    }
}

顺便说一句,您不需要在 where 过滤器中重复加入条件

于 2013-02-12T16:56:23.837 回答
2

您在 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();
于 2013-02-12T16:46:56.487 回答