1

現在のすべての学期を返す次のコードがあります。コレクションに「Summer」セメスターがあるかどうかを特定し、「Summer I」に動的に置き換えるにはどうすればよいですか?

return activeSemester.Select(c => new ActiveSemester
        {
            id = c.SemesterId,
            name = c.Name, // Here I want to check if it is Summer               
        }).ToList();

更新: 夏学期には 3 つの夏名がありますが、日付が異なります。順番に名前を付けたいだけです。また、それぞれに一意の SemesterId があります。

4

4 に答える 4

5
return activeSemester.Select(c => new ActiveSemester
{
    id = c.SemesterId,
    name = c.Name == "Summer" ? "Summer I" : c.Name
}).ToList();
于 2012-04-05T19:02:27.387 に答える
1

したがって、3つの異なる夏のセッションを正確に説明できるので、条件付きアプローチの方が理にかなっていると思います。何らかの増分メソッドを実装し、正しくソートされていないデータをこのメソッドに渡す場合、日付または学期IDが一致するときにタグActiveSemsterを付けることができます"Summer I""Summer II"

条件をLINQクエリに直接含めるか、日付またはsemsteridに基づいて夏を識別するメソッドを作成することができます。

return activeSemester.Select(c => new ActiveSemester
{
    id = c.SemesterId,
    name = c.Name == "Summer" ? GetSummmer(c.StartDate, c.EndDate) : c.Name
}).ToList();

private string GetSummer(DateTime startDate, DateTime endDate)
{
    if (startDate == summer1Start || endDate == summer1End)
        return "Summer I";
    if (startDate == summer2Start || endDate == summer2End)
        return "Summer II";
    if (startDate == summer3Start || endDate == summer3End)
        return "Summer III";

    return "Unknown Summer";
}

private string GetSummer(Integer semesterId)
{
    if (semesterId == summer1Id)
        return "Summer I";
    if (semesterId == summer2Id)
        return "Summer II";
    if (semesterId == summer3Id)
        return "Summer III";

    return "Unknown Summer";
}
于 2012-04-05T20:02:59.887 に答える
0

任意の学期に任意の学期番号を割り当てるための一般化されたソリューションの場合、学期の開始日でソートすることにより、次のことができます。このようにして、日付や ID の等号化に頼る必要がなくなります。おそらくpsubsee2003の回答ほどエレガントでもパフォーマンスもありません。ConvertToRomanNumeralSOを検索することで実装できます。

public IEnumerable<ActiveSemester> GetActiveSemesters()
{
  int summerSemesterNumber = 1;
  int winterSemesterNumber = 1;
  foreach (ActiveSemester activeSemester in _activeSemesters.OrderBy(c => c.StartDate))
  {
    if (activeSemester.Name == "Summer")
    {                        
      yield return new ActiveSemester(activeSemester)
                       {
                         Name = string.Format("{0} {1}", activeSemester.Name,  
                           ConvertToRomanNumeral(summerSemesterNumber++))
                       };
    }
    else if (activeSemester.Name == "Winter")
    {                        
      yield return new ActiveSemester(activeSemester)
                       {
                         Name = string.Format("{0} {1}", activeSemester.Name,
                           ConvertToRomanNumeral(winterSemesterNumber++))
                       };
    }
    else
    {
      yield return new ActiveSemester(activeSemester);
    }
  }
}
于 2012-04-05T21:02:44.553 に答える
0
return activeSemester.Select(c => new ActiveSemester
        {
            id = c.SemesterId,
            name = c.Name.Replace("Summer", "Summer I") // Here I want to check if it is Summer               
        }).ToList();

私がそれに取り組んでいる間: なぜ .ToList() を呼び出しているのですか? これはほとんどの場合間違っています。一般的には、IList<T> や List<T> よりも IEnumerable<T> を使用する方が適切です。

于 2012-04-05T19:03:29.257 に答える