c#-从.NET 2.0中的DataTable列获取不同的值

我正在使用.NET Framework 2.0开发的旧项目.
在这个项目中,我从DataRowCollection的ItemNo列中获得了不同的值.我只对ItemNo感兴趣. DataRow由ItemNo,Qty和Date组成.

我正在考虑迭代DataRowCollection并将唯一的ItemNo添加到如下所示的字符串列表中(未经测试)

var items =  new List<string>();
foreach (DataRow orderItem in rows)
{
     var itemNo = orderItem["ITEMNO"].ToString().Trim();
     if(items.Find(delegate(string str) { return str == itemNo ;}) == null)
     {
            items.Add(itemNo);
     }
 }

没有LINQ,有没有更好的方法(.Net Framework 2.0不喜欢LINQ)

解决方法:

// Given a data table:
var dt = new DataTable();
dt.Columns.Add("ITEMNO");
dt.Rows.Add("1 ");
dt.Rows.Add(" 1");
dt.Rows.Add("2");

var dict = new Dictionary<string, bool>();

foreach(DataRow dr in dt.Rows)
{
    var itemNo = dr["ITEMNO"].ToString().Trim();

    // Take advantage of O(1) lookup:
    if (!dict.ContainsKey(itemNo))
    {
        dict.Add(itemNo, true);
    }
}

// Get list from dictionary keys:
var items = new List<string>(dict.Keys);

如果可以在服务器上安装.Net 3.5,并在应用程序中引用System.Core.dll,则可以利用HashSets来将上面的代码修改为:

var hashSet = new HashSet<string>();

foreach(DataRow dr in dt.Rows)
{
    var itemNo = dr["ITEMNO"].ToString().Trim();    

    // Only unique elements are added to the hash set, 
    // no need to check for duplicates
    hashSet.Add(itemNo);    
}

var items = new List<string>(hashSet);

在字典上使用HashSet的好处无疑是微不足道的,但是我更喜欢它,因为我不在乎字典中的任意bool值,但是您需要满足.Net 3.5和参考要求.

上一篇:c#DataTable选择不使用特殊字符


下一篇:C# DataTable映射成Entity