-5

LINQ を使用してこのループ構造を変換する方法を教えてください。

list<Entity> auditlist=retreivedata()\\method to fetch data
foreach (Entity obj in auditList)

    obj.CultSpecificRevisedData = "NULL";
    obj.CultSpecificPublishedData = "NULL";

    if (obj.RevisedData != null && obj.RevisedData != "NULL")
        obj.CultSpecificRevisedData = ConvertToProfileSpecificFormat(Convert.ToDecimal(obj.RevisedData), DecimalSeparator);
    if (obj.PublishedData != null && obj.PublishedData != "NULL")
        obj.CultSpecificPublishedData = ConvertToProfileSpecificFormat(Convert.ToDecimal(obj.PublishedData), DecimalSeparator);

    var yearPart = obj.CalendarYear;
    var monthPart = string.Empty;
    var frequencyName = GetEnglishFrequencyBame(frequencyTypeMasId);
    if (frequencyName == FrequencyType.Monthly)
    {
        monthPart = new DateTime(obj.CalendarYear, GetMonthNumber(obj.Month), 1).ToString("MMM");
        obj.CultSpecificPeriod = monthPart + "-" + yearPart.ToString();
    }
    if (frequencyName == FrequencyType.Quarterly)
    {
      UserMessage = obj.QuarterName;
        obj.CultSpecificPeriod = UserMessage + "-" + yearPart.ToString();
    }
    else if (frequencyName == FrequencyType.BiAnnually)
    {
        UserMessage = obj.SemesterName;
        obj.CultSpecificPeriod = UserMessage + "-" + yearPart.ToString();
    }
    else
    {
        obj.CultSpecificPeriod = yearPart.ToString();
    }
}
4

2 に答える 2

2

これを LINQ を使用するように変更しないことをお勧めします。

1) オブジェクトを変更しています。それはLINQが設計されたものではありません。クエリ用に設計されています。

2)ここには多くの条件付きロジックがあります-「ある条件に基づいてXをYまたはZに設定する」だけでなく、「Xを設定するかもしれませんが、そうしないかもしれません」。繰り返しますが、これは LINQ には適していません。

機能の一部を小さなメソッドに抽出しようとすることお勧めします-周波数名を扱う部分は、おそらくスイッチを使用して、より明確に表現でき、共通の機能を抽出できます-しかし、それはLINQに変換する問題ではありません.必要な。

于 2013-01-31T10:08:21.333 に答える
0

その価値のために、おそらくこのようなコードがもう少し必要です。これが何らかの形で役立つことを願っています。

foreach (var e in retreivedata())
{
    e.CultSpecificRevisedData = null;
    e.CultSpecificPublishedData = null;

    if (!string.IsNullOrWhiteSpace(e.RevisedData))
    {
        e.CultSpecificRevisedData = ConvertToProfileSpecificFormat(
            Convert.ToDecimal(e.RevisedData),
            DecimalSeparator);
    }

    if (!string.IsNullOrWhitespace(e.PublishedData))
    {
        e.CultSpecificPublishedData = ConvertToProfileSpecificFormat(
            Convert.ToDecimal(e.PublishedData),
            DecimalSeparator);
    }

    switch (GetEnglishFrequencyBame(frequencyTypeMasId))
    {
        case FrequencyType.Monthly:
            var f = CultureInfo.CurrentCulture.DateTimeFormat;
            obj.CultSpecificPeriod = string.Format(
                "{0}-{1}",
                f.GetAbbreviatedMonthName(GetMonthNumber(e.Month)),
                e.CalendarYear);
            break;

        case FrequencyType.Quarterly:            
            UserMessage = e.QuarterName;
            e.CultSpecificPeriod = string.Format(
                "{0}-{1}",
                e.QuarterName,
                e.CalendarYear)
            break;

        case FrequencyType.BiAnnually:
            UserMessage = e.SemesterName;
            e.CultSpecificPeriod = string.Format(
                "{0}-{1}",
                e.SemesterName,
                e.CalendarYear)
            break;

        default:
            obj.CultSpecificPeriod = e.CalendarYear.ToString();
    }
}
于 2013-01-31T10:48:24.527 に答える