linq查询返回单行

时间:2015-03-30 10:11:59

标签: c# linq linq-to-entities

对于发生的任何交易,会在我的表格中插入一行。

我有表格(交易),如下面的

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

如何修改我的查询以实现此目的?

提前致谢。

3 个答案:

答案 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));