如何从以下C#代码更改集合中的名称?

时间:2012-04-05 19:01:22

标签: c#

我有以下代码,它将返回所有当前学期。如何识别集合中是否有“夏季”学期并动态地将其替换为“夏季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 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

因此,您可以准确地说明您的3个不同夏季课程,我认为有条件的方法会更有意义。如果您实施任何类型的递增方法并将数据传递给未正确排序的此方法,则当日期或学期ID与ActiveSemster匹配时,您可以将"Summer I"标记为"Summer II"

您可以直接在LINQ查询中包含条件,也可以创建一个基于日期或semster id识别夏天的方法

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";
}

答案 2 :(得分: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()?这几乎总是错误的,并且通常更好的去IEnumerable< T>而不是IList< T>或列出< T>。

答案 3 :(得分:0)

对于任何学期任何学期编号分配的通用解决方案,您可以通过在学期开始日期排序来执行以下操作。这样您就不必依赖于日期或ID的等同。可能不像psubsee2003那样优雅或表现。 ConvertToRomanNumeral可以通过搜索SO来实现。

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);
    }
  }
}