-3

このクエリをlinqに変換するのを手伝ってくれる人はいますか? ユニオンを使用してからlinqで合計する方法がわかりません。

SELECT Patientname, SUM(A)AS Trec
  FROM (SELECT Pm.Patientname, COUNT(*)AS A
          FROM Facilitycheckinholdorder Fcho
              INNER JOIN Medordertype Mot ON Fcho.Orderseq = Mot.Orderseq
              JOIN Patientmaster Pm ON Mot.Patientseq = Pm.Patientseq
                   AND Fcho.Filleddate BETWEEN '2011-09-01 00:00:00:000' AND '2012-10-16 00:00:00:000'
                   AND Mot.Facilityid = 139
         GROUP BY Pm.Patientname
       UNION ALL
       SELECT Pm.Patientname, COUNT(*)AS A
         FROM Rxqdeliveryholdorder Rdho
              INNER JOIN Medordertype Mot ON Rdho.Orderseq = Mot.Orderseq
              JOIN Patientmaster Pm ON Mot.Patientseq = Pm.Patientseq
                   AND Rdho.Filleddate BETWEEN '2011-09-01 00:00:00:000' AND '2012-10-16 00:00:00:000'
                   AND Mot.Facilityid = 139
         GROUP BY Pm.Patientname
      ) AS Trec
  GROUP BY Patientname;
4

2 に答える 2

0

実際、これは本当の質問ではありませんが、最善を尽くしました...

var lst1 =
    from fhco in facilitycheckinholdorder
    join mot in meordertype on mot.orderseq equals fhco.orderseq
    join pm in patientmaster on mot.patientseq equals pm.patientseq
    where 
        fcho.FilledDate >= new DateTime(2011, 9, 1)
        fcho.FilledDate <= new DateTime(2012, 10, 16)
    select pm;
var lst2 =
    from rdho in rxqdeliveryholdorder
    join mot in meordertype on rdho.orderseq equals mot.orderseq
    join pm in patientmaster on moit.patientseq equals pm.patientseq
    where 
        fcho.FilledDate >= new DateTime(2011, 9, 1)
        fcho.FilledDate <= new DateTime(2012, 10, 16)
    select pm;
var res = 
    from item in lst1.Union(lst2)
    select new { Name = item.patientname, Count = lst1.Count() + lst2.Count() };
于 2012-10-22T06:39:34.060 に答える
0

キーポイント:

  • 最も外側のクエリは冗長なようです。
  • あなたの名前は一般的な C# スタイルではないため、読みにくくなっています。
  • UNION ALL対応してConcatおりませんUnion
  • 早めに片付けるConcatことで、クエリを合理化できます。これは SQL で行うことができます。

.

var result =
    from order in Queryable.Concat(
        FacilityCheckInHoldOrder.Select(o => new { o.OrderSeq, o.FilledDate }),
        RxqDeliveryHoldOrder    .Select(o => new { o.OrderSeq, o.FilledDate }))
    where order.FilledDate >= new DateTime(2011,  9,  1) &&
          order.FilledDate <  new DateTime(2012, 10, 16)
    join type in MedOrderType.Where(t => t.FacilityID == 139)
        on order.OrderSeq equals type.OrderSeq
    join patient in PatientMaster
        on type.PatientSeq equals patient.PatientSeq
    group by patient.PatientName into grp
    select new
    {
        PatientName = grp.Key,
        Trec = grp.Count()
    };
于 2012-10-22T13:35:21.203 に答える