0

次のコードを使用して、Web API 経由で 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]



                });
            }
        }

アイテム リストの Name 属性は、構造が次のような列から取得する必要があります。

Groups>Subgroup>item

したがってvar temp = columns[5].Split('|', '>');、コードで ">" の前の列の最初の要素 (上記の場合はグループ) を取得するために使用します。そして、これはうまくいきます。

ただし、結果に多くの重複があります。これは、列の他の項目が次の可能性があるためです。

(これらは、私の csv 列 9 のエントリの一部です) Groups>Subgroup2>item2, Groups>Subgroup3>item4,Groups>Subgroup4>item9

すべては で始まりますがGroups、取得したいのはGroups一度だけです。

そのまま、の長いリストを取得しGroupsます。重複を停止するにはどうすればよいですか?

リスト内のアイテムがName「グループ」で返された場合、その名前の他のアイテムが返されないようにしたいと考えています。このチェックを実行して実装するにはどうすればよいですか?

4

2 に答える 2

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(...);
}
于 2013-10-29T17:37:53.147 に答える