代码之家  ›  专栏  ›  技术社区  ›  Mohammad

Linq查询返回记录列表,而不是显示单个记录

  •  3
  • Mohammad  · 技术社区  · 8 年前

    我正在努力发展银行体系。我试图将三个表记录连接到一个表中。但问题是,当我编译它时,我得到了以下错误。

    错误CS1929“IOrderedQueryable<>'不包含 “Concat”的定义和最佳扩展方法重载 '可并行枚举。混凝土(&L)&燃气轮机;(ParallelQuery<,IEnumerable<)'需要 “ParallelQuery”类型的接收器<&燃气轮机;

    这是我的Linq查询。

      public string TranscationDetails(string Account_Number)
                {
    
                    var accountNumber = int.Parse(Account_Number);//It could be better to use TryParse
                    using (HalifaxDatabaseEntities context = new HalifaxDatabaseEntities())
                    {
    
            var inOut = context.Current_Account_Deposit.Where(x => x.Account_Number == accountNumber).Select(w => new
                    {
                        w.Account_Number,
                        Deposit = (decimal?)null,
                        Withdrawal = (decimal?)w.Amount,
                        w.Date
                    }).Concat(context.Current_Account_Withdraw.Select(d => new
                    {
                        d.Account_Number,
                        Deposit = (decimal?)d.Amount,
                        Withdrawal = (decimal?)null,
                        d.Date
                    })).OrderBy(r => r.Date)
                 .Concat(context.Current_Account_Details.Select(e => new
                 {
                     //You should perform same anonymous type which you want to concat
                     Account_Number = e.Account_Number,
                     Deposit = (decimal?)e.Account_Balance,
                     Withdrawal = (decimal?)null,
                    e.Account_Fees
                 }));
    
    
                        var js = new System.Web.Script.Serialization.JavaScriptSerializer();
    
                        return js.Serialize(inOut); // return JSON string
                    }
                }
            }
    

    这是DBContext类。

      public partial class HalifaxDatabaseEntities : DbContext
            {
                public HalifaxDatabaseEntities()
                    : base("name=HalifaxDatabaseEntities")
                {
                }
    
                protected override void OnModelCreating(DbModelBuilder modelBuilder)
                {
                    throw new UnintentionalCodeFirstException();
                }
    
                public virtual DbSet<Web_User_login> Web_User_login { get; set; }
                public virtual DbSet<USER> USERS { get; set; }
                public virtual DbSet<tblUser> tblUsers { get; set; }
                public virtual DbSet<Current_Account_Holder_Details> Current_Account_Holder_Details { get; set; }
                public virtual DbSet<Current_Account_Details> Current_Account_Details { get; set; }
                public virtual DbSet<Current_Account_Deposit> Current_Account_Deposit { get; set; }
                public virtual DbSet<Current_Account_Withdraw> Current_Account_Withdraw { get; set; }
            }
    

    这是模型类。。 enter image description here 这是数据库记录 enter image description here

    这是我在单击帐号时预期的结果,它应该显示特定的记录 enter image description here

    3 回复  |  直到 8 年前
        1
  •  2
  •   Edu001    8 年前

    您只能在本地连接。尝试添加。ToList()在每个Concat之前,以便在连接之前在本地具体化记录。

    注意:Where条款仅适用于活期存款。撤消,详细信息将返回所有记录。

    尝试生成3个基本上下文查询。每个表一个,用ToList()完成每个表。稍后使用Concat将所有3个列表连接到一个列表中。

    这将使你理解这个概念,你可以从这里继续前进。

    var q1 = context.Current_Account_Deposit.Where(x => x.Account_Number == accountNumber).Select(w => new
        {
            w.Account_Number,
            Deposit = (decimal?)null,
            Withdrawal = (decimal?)w.Amount,
            w.Date
        }).ToList();
    
        var q2 = context.Current_Account_Withdraw.Select(d => new
        {
            d.Account_Number,
            Deposit = (decimal?)d.Amount,
            Withdrawal = (decimal?)null,
            d.Date
        }).OrderBy(r => r.Date).ToList();
    
        var q3 = context.Current_Account_Details.Select(e => new
             {
                 //You should perform same anonymous type which you want to concat
                 Account_Number = e.Account_Number,
                 Deposit = (decimal?)e.Account_Balance,
                 Withdrawal = (decimal?)null,
                 e.Account_Fees
             }).ToList();
    
        var inOut = q1.Concat(q2).Concat(q3).ToList();
    

    您可能需要在q2和Q3中添加相同的Where子句。我不确定你是否想要那样。

        2
  •  1
  •   Vijunav Vastivch    8 年前

    假设您已经有记录列表。

    应该是这样的。

    var getList = inOut.Where(x=>x.Account_Number == 
    Account_Number).FirstOrDefault();
    

    如果您的 inOut 是列表的真实结果。

        3
  •  1
  •   Arijit Mukherjee    8 年前

    我在select之前添加了where子句 .Where(x=> x.Account_Number == accountNumber)

    更改此项:

     var inOut = context.Current_Account_Deposit.Select(w => new
                {
                    w.Account_Number,
                    Deposit = (decimal?)null,
                    Withdrawal = (decimal?)w.Amount,
                    w.Date
                }).Concat(context.Current_Account_Withdraw.Select(d => new
                {
                    d.Account_Number,
                    Deposit = (decimal?)d.Amount,
                    Withdrawal = (decimal?)null,
                    d.Date
                })).OrderBy(r => r.Date)
                .Concat(context.Current_Account_Details.Select(e => new
                {
                    e.Account_Number,
                    Account_Balance=(decimal?)e.Account_Balance
                }));
    

    收件人:

     var inOut = context.Current_Account_Deposit.Where(x=> x.Account_Number == accountNumber ).Select(w => new
                {
                    w.Account_Number,
                    Deposit = (decimal?)null,
                    Withdrawal = (decimal?)w.Amount,
                    w.Date
                }).Concat(context.Current_Account_Withdraw.Select(d => new
                {
                    d.Account_Number,
                    Deposit = (decimal?)d.Amount,
                    Withdrawal = (decimal?)null,
                    d.Date
                })).OrderBy(r => r.Date)
                .Concat(context.Current_Account_Details.Select(e => new
                {
                    e.Account_Number,
                    Account_Balance=(decimal?)e.Account_Balance
                }));
    

    accountnumber 执行concat之前的详细信息