0

ユーザーが選択リストで選択したオプションに基づいて要約レポートを生成するために使用する方法があり、日付範囲内のサブセットの場所を使用して、地域で完了したテストの種類の数を数えます。

データは次のようになります: 2015 年 2 月 1 日から 2015 年 3 月 1 日までの場所別の完了したテスト数

Total  TestType  Location  Region  Division
455    24 Hour   Lab 1     City 1  Division A
28     24 Hour   Lab 2     City 1  Division A
95     24 Hour   Clinic Z  City 2  Division A
189    24 Hour   Clinic Y  City 2  Division A

異なるテスト タイプを同じ期間に実行すると、次のようになります。

Total  TestType  Location  Region  Division
285    48 Hour   Lab 1     City 1  Division A
12     48 Hour   Lab 2     City 1  Division A
75     48 Hour   Clinic Z  City 2  Division A
106    48 Hour   Clinic Y  City 2  Division A

ここで、ユーザーは 1 つのレポートで要約内訳を表示したいと考えていtestTypeます (SQL では、別の属性を group by に追加します)。の選択リストでtestTypeId、「すべて」の項目として 0 を使用しています。完璧な世界では、新しいクエリを作成するのではなく、同じプライベート メソッドを保持できるように、 IQueryableifに別の追加が必要です。testTypeId == 0

「すべて」の状況でデータがどのように見えるかを次に示します。

Total  TestType  Location  Region  Division
455    24 Hour   Lab 1     City 1  Division A
285    48 Hour   Lab 1     City 1  Division A
59     12 Lead   Lab 1     City 1  Division A
28     24 Hour   Lab 2     City 1  Division A
12     48 Hour   Lab 2     City 1  Division A
95     24 Hour   Clinic Z  City 2  Division A
75     48 Hour   Clinic Z  City 2  Division A
5      12 Lead   Clinic Z  City 2  Division A
189    24 Hour   Clinic Y  City 2  Division A
106    48 Hour   Clinic Y  City 2  Division A
8      12 Lead   Clinic Y  City 2  Division A

以下の例は、追加したいものを持っているものを示していますが、構文は、IQueryableを含む を取得IGroupingして、それを のターゲット型に変換できないことを示していIQueryableます。

ここで誰かが私を良い方向に向けることができますか?

private CompletedCountReport GetCompletedCountsByRegion(int regionId, DateTime? startDate, DateTime? endDate, int testTypeId)
{
    var ccRpt = new CompletedCountReport { CompletedCounts = new List<CompletedCount>(), StartDate = startDate, EndDate = endDate, SelectedRegionID = regionId};

    var query = HolterTestDao.FindAll(new GetCompletedByRegionIdAndDates(regionId, startDate.Value, endDate.Value));

    // a specific test type was selected
    if (testTypeId > 0)
    {
        query = query.Where(x => x.HolterTestType == testTypeId);
    }
    // THIS IS WHAT I WANT TO ADD -> otherwise group by test type  <-  THIS IS WHAT I WANT TO ADD.
    if (testTypeId == 0)
    {
        query = query.GroupBy(x => x.HolterTestType);
    }
    // order by locationID within the region.
    query = query.OrderBy(x => x.Location.ID);

    var htList = query.ToList();

    // now Group by Location, to get counts. 
    var reportContents = htList.GroupBy(x => x.Location.ID);
    foreach (var r in reportContents)
    {
        var rList = r.ToList();

        var cc = new CompletedCount();
        var loc = LocationDao.FindById(r.Key);
        cc.Description = loc.Description;
        cc.RegionId = loc.Region.ID;
        cc.DivisionId = loc.Region.Division.ID;
        cc.TestTypeId = testTypeId;
        cc.Count = rList.Count;
        ccRpt.CompletedCounts.Add(cc);
    }

    return ccRpt;
}
4

1 に答える 1