C# IQueryableto 到 IEnumerable 使用 Linq 表达式和 class

C# IQueryableto to IEnumerable using Linq expressions and class

我有一个 class 应该使用连接从数据库中获取查询结果。

我的 class 是:

`
   public class StepTwo 
    {
        public int Id { get; set; }
        public string Party { get; set; }
        public string Currency { get; set; }
        public string Account { get; set; }
        public double? Amount { get; set; }
    }
`

然后我创建了一个方法,它将 return 结果:

  public IEnumerable<StageTwo> StepTwo()
    {
        var queryJoin = (from inn in db.Input.Take(10)
                        join yacc in db.AccY on inn.Action equals yacc.Action
                        orderby inn.Id descending
                        select new 
                        {
                            inn.Id,
                            inn.XParty,
                            inn.Curr,
                            yacc.Action,
                            inn.Amount
                        });
         return queryJoin;
    }

在我没有使用连接的其他方法中,这工作正常,但现在不起作用。我在 return queryJoin; 上收到错误消息:

`
Cannot implicitly convert type 'System.Linq.IQueryable<<anonymous type: int Id, string XParty, string Curr, string YAction, double? Amount>>' to '
System.Collections.Generic.IEnumerable<Project.StepTwo>'. An explicit conversion exists (are you missing a cast?)`

我知道 class 名称与数据库名称有点不同,但我已尝试更改它们以匹配。根据上述错误,我认为是其他原因。

如有任何建议,我们将不胜感激。

您的错误消息告诉您 queryJoin 是匿名类型,但您试图将其强制为 IEnumerable<StageTwo>,而 C# 无法进行该转换。

queryJoin 是匿名类型的原因是因为您没有在 linq 查询中定义它。所以要修复它,而不是这样:

select new 
{
    inn.Id,
    inn.XParty,
    inn.Curr,
    yacc.Action,
    inn.Amount
});

你想要这个:

select new StepTwo 
{
    Id = inn.Id,
    Party = inn.XParty,
    Currency = inn.Curr,
    Account = yacc.Action,
    Amount = inn.Amount
});