2013-12-19 3 views
1

Теперь я обновился до сложной ситуации, и я ужасно застрял. Пожалуйста, дайте мне знать, если вы можете поделиться с ним некоторым светом.Группировка строк и добавление в список

Я больше не имею это как List<string>. Это теперь List<categories> Который будет обладать следующими свойствами

public class Categories 
    { 
     public string DisplayName { get; set; } 
     public string ValueCode { get; set; } 
     public string Count { get; set; }   
    } 

Это будет иметь значения, как

Category1/SubCategory1 
cat1/sc1 
5 

Category1/SubCategory2 
cat1/sc2 
4 

Category 2/Subcategory1 
cat2/sc1 
5 

Category 2/Subcategory2 
cat2/sc2 
23 

Итак, я обновил свой существующий JobCateogry Clas и так далее.

public class JobCateogry 
    { 
     public string DisplayName { get; set; } 
     public string ValueCode { get; set; } 
     public string Count { get; set; } 
     public List<JobCateogry> SubCategories { get; set; } 
    } 

Я попытался разбить строку и назначить его на новый класс в два этапа первого расщеплением, а затем assiging. Но я уверен, что делаю это неправильно, потому что в тот момент, когда я раскол, я теряю счет.

var lstCategory = Categories 
         .Where(i => i.count > 0) 
         .Select(item => item.valueCode.Split('/')           
         .Select(k =>(k)).ToList(); 

    List<JobCategories> jobcategories = lstCategory 
             .Select(item => item.Split(QueryStringConstants.CAT_SEPERATOR.ToCharArray()[0])) 
             .GroupBy(tokens => tokens[0].Trim(), tokens => tokens[1]) 
          .Select(g => new JobCategories(g.Key, g.DisplayName,g.ToList(),)).ToList(); 

Помошь?

(мне нужно разделить на значение кода и Покажите DisplayName и Count)

* Старый Вопрос * У меня есть список, который имеет строк что-то вроде этого

"Category1/SubType1" 
"Category1/SubType2" 
"Category1/SubType3" 
"Category1/SubType4" 
"Category2/SubType1" 
"Category2/SubType2" 
"Category2/SubType3" 
"Category2/SubType4" 

У меня есть класс, который имеет два свойства.

public string Category { get; set; } 
public List<string> SubCategory{ get; set; } 

Мне нужно пройти через список и выбрать все категории, а затем добавить к ним подкатегории.

Я отсортировал список, и я смог добиться традиционного способа, выполнив цикл for, взяв первую строку и сравнив ее с остальными. Мне было интересно, есть ли какой-нибудь более аккуратный способ сделать это?

ответ

2

Расщепление каждый элемент списка, а затем группировать по категориям имя должно дать желаемый результат:

list.Select(item => item.Split('/')) 
    .GroupBy(tokens => tokens[0], tokens => tokens[1]) 
    .Select(g => new TheClass 
        { 
         Category = g.Key, 
         SubCategory = g.ToList() 
        }); 
+1

Создатель темы может захотеть, чтобы SubCategory являлась коллекцией жетонов [1] - я считаю это двусмысленным на данный момент. Кроме того, 'g.ToList()' возвращает 'List ' или 'List '? – Warty

+0

@ItzWarty, 'List ' не был преднамеренным, спасибо за комментарий. – Andrei

0

Вы можете попробовать этот подход:

var query = from input in inputs 
      let split = input.Split('/') 
      group split[1] by split[0] into grouping 
      select new MyClass 
      { 
       Category = grouping.Key, 
       SubCategory = grouping.ToList() 
      }; 
0

Нечто подобное должно работать

IEnumerable<string> items = GetSomeItems() ; 

Widget[] list = items 
       .Select(s => s.Split('/')) 
       .GroupBy(x => x[0] , x => x[1]) 
       .Select(g => new Widget(g.Key , g.ToList())) 
       .ToArray() 
       ; 

данный класс:

class Widget 
{ 
    public Widget (string category , IEnumerable<string> subcategories) 
    { 
    this.Category  = category ; 
    this.Subcategories = subcategories.ToArray() ; 
    } 
    public string Category { get; private set; } 
    public string[] Subcategories { get ; private set ; } 
} 
Смежные вопросы