2014-07-24 44 views
0

鲜明的列名我有一个SQL查询这样获取列表

SELECT DISTINCT CustomerName FROM Customers 

它返回不同customerNames的名单,

我如何在C#

目前我得到这个列表我在DataTable中获取结果,然后在列表中只提取我需要的列。

private List<String> GetDistinctCustomerNames() 
{ 
    var dataTable = new DataTable("ResultDataTable"); 
    using (var sqlCommand = new SqlCommand()) 
    { 
     // set the connection for the commnad 
     sqlCommand.Connection = sqlConnection; 

     // assign the insert query as a text to the sql command 
     sqlCommand.CommandText = "SELECT DISTINCT CustomerName FROM Customers"; 

     using (var sqlDataAdapter = new SqlDataAdapter()) 
     { 
      sqlDataAdapter.SelectCommand = sqlCommand; 
      dataTable.Load(sqlCommand.ExecuteReader()); 
     } 

     if (dataTable.Columns.Contains("CustomerName")) 
     { 
      return (from DataRow dataRow in dataTable.Rows select dataRow["CustomerName"].ToString()).ToList(); 
     } 

    return null; 
} 

但我不觉得这是一个很好的解决方案。

+0

如果添加了Dapper,你可以做这样的事情:IList的 MYLIST = Dapper.SqlMapper.Query ( sqlConnnection, “SELECT DISTINCT客户名称客户;”)ToList(); –

+0

使用简单的SqlDataReader有什么问题? –

+0

您可以将输出作为XML接收,并使用XML解析器为您创建列表。也许更优雅,虽然可能效率不高。 –

回答

0

而是有你为该回报我会做一个foreach

ForEach(var element in DataTable.Rows) 
    if(element.CustomerName != NULL) 
     list.add(element.ToString()) 
     //To string is only needed if the db stores it as not an nvarchar or something like that 

return list 
0

后你从方法列表中,您可以应用下面的代码。

// Get distinct elements and convert into a list again. 
List<string> distinct = list.Distinct().ToList(); 
+0

由于我的不同查询,我只会从SQL中获得一个Distinct List,我想避免DataTable迭代。 – Pankaj

+0

@潘卡伊。尝试这个链接,请结合顶部1和明确的一起.http://stackoverflow.com/questions/20086243/sql-server-top1-with-distinct –