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 查询中,也可以创建一个方法来根据日期或学期 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";
}
于 2012-04-05T20:02:59.887 回答
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> 或 List<T> 更好。

于 2012-04-05T19:03:29.257 回答
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);
    }
  }
}
于 2012-04-05T21:02:44.553 回答