对于发生的任何交易,会在我的表格中插入一行。
我有表格(交易),如下面的
ID ----------金额
1 ------------ 150.00
2 ----------- 246.00
3 ----------- 100.00
4 ----------- 201.00
如果上述交易发生多种投标类型(现金,信用卡等),则对于每种投标类型,将一行插入另一个表格中。
此新表(投标)如下所示
ID ---- TenderType ----- TransactionId
1 ----------- 10 ---- 1
2 ------------ 20 ---- 2
3 ------------- 10 ----- 2
以上说明,第一笔交易(来自交易表,金额150.00)只发生一种投标类型(10)。在投标表中只有一行。
第二笔交易(金额246.00)发生了两种投标类型(10和20)。在投标表中有两行。
现在我希望输出为
金额------ TenderType
150.00 ------ 10
246.66 ------- 10/20
现在我正在c#中编写一个linq查询,如果Tender表中有多行用于Transaction表中的每个Amount,它返回两行。
我的查询如下:
(from T in context.Transactions
join TT in context.TenderType on T.ID equals TT.TransactionId
select new myModel
{
Amount = T.Amount,
TenderType = TT.TenderType
}).ToList();
对于此查询,我的输出如下所示:
金额------ TenderType
150.00 ------ 10
246.66 ------- 10
246.66 ------- 20
但我的输出应该是这样的:
金额------ TenderType
150.00 ------ 10
246.66 ------- 10/20
如何修改我的查询以实现此目的?
提前致谢。
答案 0 :(得分:0)
试试这个
(from T in context.Transactions
select new myModel
{
Amount = T.Amount,
TenderType = context.TenderType.Where(x=>x.TransactionId==T.ID).Select(x=>x.TenderType).FirstOrDefault()
}).ToList();
答案 1 :(得分:0)
听起来你可以从交易到投标有one to many关联。
public class Transaction {
public int ID { get; set; }
public double Amount { get; set; }
public virtual ICollection<Tender> Tenders { get; set; }
}
from T in context.Transactions
select new {
Amount = T.Amount,
TenderTypes = T.Tenders.Select(t => t.TenderType)
}
答案 2 :(得分:0)
试试这个: -
var result= (from T in context.Transactions
join TT in context.TenderType
on T.ID equals TT.TranscationID into g
select new
{
Amount = t.Amount,
TenderType = String.Join("/",g.Select(x => x.TenderTypeID))
}).Where(x => !String.IsNullOrEmpty(x.TenderType));