Linq中的最大值选择内部连接

时间:2013-01-08 16:05:26

标签: c# linq linq-to-entities

我有以下两难困境:

我们有两个表:患者和费用,patOID是费用表中的外键。

两个表之间的简单连接:

 from itemPat in listPat 
 join itemCharge in listCharge on itemPat.patOID equals itemC.patOID 
 select new 
      {
        itemPat.patOID,
        itemCharge.paid
      }

考虑到患者可以收取超过1次费用的面孔,我如何才能获得某个字段的最大价值(例如付费)。

我尝试了什么:

 from itemPat in listPat 
 join itemCharge in listCharge on itemPat.patOID equals itemC.patOID into zzz
 select new 
       {
           itemPat.patOID,
           MaxPay=zzz.Max(p=>p.paid),
       }

此解决方案为我提供了该字段的价值,但不允许我访问我想要记录的记录中的其他字段。 我怎样才能做到这一点 ?

我想的是:

  from itemPat in listPat 
     join itemCharge in listCharge.Where(p=>Max(p.paid)) on itemPat.patOID equals itemC.patOID into zzz
     select new 
           {
               itemPat.patOID,
               MaxPay=zzz.Max(p=>p.paid),
           }

1 个答案:

答案 0 :(得分:3)

from itemPat in listPat 
join itemCharge in listCharge on itemPat.patOID equals itemC.patOID into g
select new  {
   itemPat.patOID,
   MaxCharge = g.OrderByDescending(p => p.paid).FirstOrDefault()
}

MaxCharge属性将包含具有最高付费值的费用对象,如果没有患者收费,则为null。