2015-09-10 82 views
0

我正在学习用ado.net asp.net mvc的,我有这个方法在我的仓库类SQL Server查询只返回一个结果

public IEnumerable<int?> GetAllUniqueYears() 
{ 
    using (IDbConnection dbConnection = dbConnectionFactory.CreateConnection()) 
    { 
     using (IDbCommand cmd = dbConnection.CreateCommand()) 
     { 
      cmd.CommandText = "SELECT DISTINCT YEAR(DateAdded) As Year FROM GeoCounters"; 
      cmd.CommandTimeout = 1000; 

      using (IDataReader reader = cmd.ExecuteReader()) 
      { 
       if (!reader.Read()) 
       { 
        yield return null; 
       } 
       else 
       { 
        yield return (int)reader["Year"]; 
       } 
      } 
     } 
    } 
} 

当我打开我的观点是只得到一个结果,但是当我在运行SQL Server Management Studio中的查询有4个结果

控制器动作

public ActionResult Index() 
{ 
     HomeIndexViewModel model = new HomeIndexViewModel() 
     { 
      GeoCounterDefinitions = geodefrepo.GetAll() 
      .Select((x,y) => new SelectListItem 
       { 
        Text = x.Id + " " + x.FriendlyDesc, 
        Value = (y + 1).ToString() 
       }), 
      Years = geocounterrepo.GetAllUniqueYears() 
      .Select(x => new SelectListItem 
      { 
       Text = x.ToString(), 
       Value = x.ToString() 
      }) 
     }; 

     return View(model); 
    } 

回答

2

你需要一个while循环。

using (IDataReader reader = cmd.ExecuteReader()) 
{ 
    while (reader.Read()) 
    { 
     yield return (int)reader["Year"]; 
    } 
} 
+0

我知道它会是简单的东西,谢谢:) – Goodsoup