【问题标题】:Linq Query Failed with Concat Operator使用 Concat 运算符的 Linq 查询失败
【发布时间】:2017-12-22 01:17:25
【问题描述】:

我正在尝试开发银行系统。我试图将三个表记录加入到单个表中。但问题是当我编译它时出现以下错误。

错误 CS1929 'IEnumerable' 不包含 'Concat' 的定义,并且最佳扩展方法重载 'Queryable.Concat(IQueryable, IEnumerable)' 需要类型为 '可查询

这是 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 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();**//Error on this line**



                var js = new System.Web.Script.Serialization.JavaScriptSerializer();

                return js.Serialize(inOut); // return JSON string
            }
        }

这是数据库记录

这里是模型类。

【问题讨论】:

  • 大声笑concat - 你是菜鸟。你需要一个join
  • 你的意思是我应该使用 join 而不是 concat
  • 其实不,你在做的是疯了。您至少可以不使用动态类型吗?创建一个您希望所有这些记录进入的适当类。然后在您的select new <thenewclass> 上,这将避免一些问题。那么你想要的是 AddRange 函数来连接列表。
  • 我得到了很多建议,我正在做出改变,但我还是没能解决它
  • 您正在尝试从Current_Account_Details 添加Account_Fees。如果你决定走这条路线,你需要在另外两个Selects 中添加Account_Fees = (decimal?)null,并在最后一个Select 中添加一个假的Date = DateTime.Now。这将确保所有三个列表都使用相同的匿名类型。

标签: sql-server entity-framework linq wcf


【解决方案1】:
 public string TranscationDetails(string Account_Number)
        {

            var accountNumber = int.Parse(Account_Number);//It could be better to use TryParse
            List<AccountTransaction> accountTransactions = new List<AccountTransaction>();
            using (HalifaxDatabaseEntities context = new HalifaxDatabaseEntities())
            {
                accountTransactions.AddRange(context.Current_Account_Deposit.Where(x => x.Account_Number == accountNumber).Select(w => new AccountTransaction
                {
                    AccountNumber = w.Account_Number,
                    Deposit = 0,
                    Withdrawal = w.Amount,
                    Date = w.Date,
                    Fee = 0
                }).ToList());

                accountTransactions.AddRange(context.Current_Account_Withdraw.Select(d => new AccountTransaction
                {
                    AccountNumber = d.Account_Number,
                    Deposit = d.Amount,
                    Withdrawal = 0,
                    Date = d.Date,
                    Fee = 0
                }).OrderBy(r => r.Date).ToList());

                accountTransactions.AddRange(context.Current_Account_Details.Select(e => new AccountTransaction
                {
                    //You should perform same anonymous type which you want to concat
                    AccountNumber = e.Account_Number,
                    Deposit = e.Account_Balance,
                    Withdrawal = 0,
                    Date = null,
                    Fee = e.Account_Fees
                }).ToList());

                var inOut = accountTransactions;



                var js = new System.Web.Script.Serialization.JavaScriptSerializer();

                return js.Serialize(inOut); // return JSON string
            }
        }

public class AccountTransaction
{
    public int AccountNumber { get; set; }
    public decimal Deposit { get; set; }
    public decimal Withdrawal { get; set; }
    public string Date{ get; set; }
    public decimal Fee { get; set; }
}

【讨论】:

  • 我已将它更新为您需要的一切。
  • 伙计,你还没有告诉我你的属性是什么。您正在尝试合并 3 个不同的类:Current_Account_Deposit、Current_Account_Withdraw、Current_Account_Details。我不知道他们真的没有日期,相应地调整课程
  • 为什么数据库中的日期是各种格式的?那很糟糕。这是学校练习吗?
  • 自己解决,您最初的问题是关于修复连接问题。使用适当的课程可以解决这个问题,不要拖我去解决你所有的问题,如果你这样做,我会投票并报告你的问题
  • 我把 Date 变成了一个字符串,有那么难吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多