LINQ で次のクエリを使用して、グループ化されたデータを取得します。
string fmt = "yyyyMM";
var pivotedMeanResults =
meanDataResults
.GroupBy(i => i.Description)
.Select(g => new PivotedMeanData
{
Description = g.Key,
Month3Value = g.Where(c => DateTime.ParseExact(c.CollectionPeriod, fmt, invariantCulture).Month == currentMonth - 3).FirstOrDefault().LabResultNo.ToString(),
Month2Value = g.Where(c => DateTime.ParseExact(c.CollectionPeriod, fmt, invariantCulture).Month == currentMonth - 2).FirstOrDefault().LabResultNo.ToString(),
Month1Value = g.Where(c => DateTime.ParseExact(c.CollectionPeriod, fmt, invariantCulture).Month == currentMonth - 1).FirstOrDefault().LabResultNo.ToString()
Month3Name = ? //
Month2Name = ? //
Month1Name = ? //
}).ToList();
データの形式は次のとおりです。
Item Collection_Period Value
==== ================= =====
Item4 201308 19
Item3 201209 2.1
Item2 201307 345
Item1 201309 13.11
Item2 201308 34
Item4 201308 58.2
Item3 201209 2.4
Item2 201309 12.1
Item1 201209 12.3
データをこの形式に操作する必要があり、必要に応じて取得しています。
Item Month3Name Month2Name Month1Name
===== ========= ========= =========
Item1 13.11
Item2 345 34 12.1
Item3
Item4 19 58.2
しかし、グループ化で同等の月の値がどのように導出されるかに基づいて、月の名前 (Month1Name、Month2Name、Month3Name) を取得できるかどうかを知りたいですか?
PS: 月の名前を次のように生成できることはわかっています。
CultureInfo cInfo = new CultureInfo("en-US");
DateTimeFormatInfo english = cInfo.DateTimeFormat;
english.GetAbbreviatedMonthName(integer)
だから私はこれを試しました
Month3Name = english.GetAbbreviatedMonthName
(g.Where(DateTime.ParseExact(c.CollectionPeriod, fmt, invariantCulture)
.Month == currentMonth - 3))
しかし、私はエラーが発生します:
<Namespace.Type.MeanData>
引数 1: 'System.Collections.Generic.IEnumerable ' から 'int' に変換できません'System.Globalization.DateTimeFormatInfo.GetAbbreviatedMonthName(int)' に最も一致するオーバーロードされたメソッドには、いくつかの無効な引数があります