Sql server Linq查询因Concat运算符而失败
我正在努力发展银行体系。我试图将三个表记录合并到一个表中。但问题是,当我编译它时,我得到了以下错误 错误CS1929“IEnumerable”不包含“Concat”的定义,而最佳扩展方法重载“Queryable.Concat(IQueryable,IEnumerable)”需要“IQueryable”类型的接收器 这是Linq查询Sql server Linq查询因Concat运算符而失败,sql-server,entity-framework,linq,wcf,Sql Server,Entity Framework,Linq,Wcf,我正在努力发展银行体系。我试图将三个表记录合并到一个表中。但问题是,当我编译它时,我得到了以下错误 错误CS1929“IEnumerable”不包含“Concat”的定义,而最佳扩展方法重载“Queryable.Concat(IQueryable,IEnumerable)”需要“IQueryable”类型的接收器 这是Linq查询 public string TranscationDetails(string Account_Number) { va
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
}
}
这是数据库记录
这是模型课。
公共字符串转换详细信息(字符串帐号)
{
var accountNumber=int.Parse(Account_Number);//最好使用TryParse
List accountTransactions=新列表();
使用(HalifaxDatabaseEntities上下文=新HalifaxDatabaseEntities())
{
accountTransactions.AddRange(context.Current\u Account\u Deposit.Where(x=>x.Account\u Number==accountNumber)。选择(w=>new AccountTransaction
{
AccountNumber=w.账户编号,
存款=0,
取款=w.金额,
日期=w.日期,
费用=0
}).ToList());
accountTransactions.AddRange(context.Current\u Account\u draw.Select(d=>new AccountTransaction
{
AccountNumber=d.账户编号,
存款=d.金额,
撤回=0,
日期=d.日期,
费用=0
}).OrderBy(r=>r.Date).ToList());
accountTransactions.AddRange(context.Current\u Account\u Details.Select(e=>new AccountTransaction
{
//您应该执行与您想要连接的相同的匿名类型
AccountNumber=e.账户编号,
存款=账户余额,
撤回=0,
日期=空,
费用=电子账户费用
}).ToList());
var inOut=账户交易;
var js=new System.Web.Script.Serialization.JavaScriptSerializer();
返回js.Serialize(inOut);//返回JSON字符串
}
}
公共类AccountTransaction
{
public int AccountNumber{get;set;}
公共十进制存款{get;set;}
公共十进制取款{get;set;}
公共字符串日期{get;set;}
公共十进制费用{get;set;}
}
Lolconcat
-你不知道。你需要一个join
你的意思是我应该用join而不是concat。事实上,你所做的是疯狂的。你至少可以不使用动态类型。创建一个您希望所有这些记录进入的适当类。然后在上选择new
,这样可以避免一些问题。然后您需要的是将AddRange
函数添加到concat列表。我收到了很多建议,我正在进行更改,但仍然未能解决问题。您正在尝试从当前帐户详细信息中添加帐户费用。如果您决定这样做,您需要将Account\u Fees=(decimal?.null
添加到其他两个Select
s,并添加一个假的Date=DateTime。现在添加到最后一个Select
。这将确保所有三个列表使用相同的匿名类型。我更新了它,将满足您的所有需要。伙计,您还没有告诉我您的属性是什么。您正在尝试合并3个不同的类别:活期存款、活期提款、活期明细。我不知道他们实际上没有日期,所以要根据情况调整类。为什么数据库中的日期格式不同?那太糟糕了。这是学校的练习吗?你自己做吧,你最初的问题是关于解决一个问题。使用一个合适的类可以解决这个问题,不要拖累我去解决你所有的问题,如果你让Date成为一个字符串,我会投反对票并报告你的问题,有那么难吗?
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; }
}