2013-10-29 29 views
0

我通过网络API使用此代码正从一个CSV文件的项目清单:获取CSV列第一个值没有重复

private List<Item> items = new List<Item>(); 

     public ItemRepository() 
     { 
      string filename = HttpRuntime.AppDomainAppPath + "App_Data\\items.csv"; 

      var lines = File.ReadAllLines(filename).Skip(1).ToList(); 

      for (int i = 0; i < lines.Count; i++) 
      { 
       var line = lines[i]; 

       var columns = line.Split('$'); 

       //get rid of newline characters in the middle of data lines 
       while (columns.Length < 9) 
       { 
        i += 1; 
        line = line.Replace("\n", " ") + lines[i]; 
        columns = line.Split('$'); 
       } 

       //Remove Starting and Trailing open quotes from fields 
       columns = columns.Select(c => { if (string.IsNullOrEmpty(c) == false) { return c.Substring(1, c.Length - 2); } return string.Empty; }).ToArray(); 


       var temp = columns[5].Split('|', '>'); 
       items.Add(new Item() 
       { 
        Id = int.Parse(columns[0]), 
        Name = temp[0], 
        Description = columns[2], 

        Photo = columns[7] 



       }); 
      } 
     } 

项目列表的名称属性必须来自列,其结构如下:

Groups>Subgroup>item

因此我使用var temp = columns[5].Split('|', '>');在我的代码“>”之前得到该列的第一个元素,其中在上述情况中是群组。这工作正常。

但是,我在结果中得到很多重复。这是因为,在列的其他项目可能是:

(这些都是一些项目在我的CSV列9) Groups>Subgroup2>item2Groups>Subgroup3>item4Groups>Subgroup4>item9

全部开始Groups,但我只想要得到Groups一旦。

因为它是我得到一长串Groups。我如何停止重复?

我希望如果列表中的项目与Name“组”一起返回,则不会返回具有该名称的其他项目。我如何进行检查并实施?

回答

1

如果你成功地获得团体的名单,采取组的列表并且使用LINQ:

var undupedList = dupedList 
    .Distinct(); 

更新:之所以明显没有工作是因为你的代码要求不只是名称,也,说明等...如果你只要求名称,Distinct()就可以工作。

更新2:试试这个:

//Check whether already exists 
if((var match = items.Where(q=>q.Name == temp[0])).Count==0) 
{ 
    items.add(...); 
} 
0

如何使用列表存储Item.Name? 然后在调用items.Add()前检查List.Contains()

简单,只有3行代码,它的工作原理。

IList<string> listNames = new List(); 
// 
for (int i = 0; i < lines.Count; i++) 
{ 
    // 
    var temp = columns[5].Split('|', '>'); 
    if (!listNames.Contains(temp[0])) 
    { 
     listNames.Add(temp[0]); 
     items.Add(new Item() 
     { 
      // 
     }); 
    } 
} 
相关问题