2017-02-08 2 views
0

Я имеющий ниже класса:Невозможно manupulate список

public class statistics 
    { 
     public int Type { get; set; } 
     public string Title { get; set; } 
     public bool Flag { get; set; } 
    } 

выше список класса статистики, так он содержит записи, как это:

1st record : Type = 1 
      Title = "abc,ttt" 
      flag= true 

2nd Records : Type = 1 
      Title = "xyz" 
      flag= true 

3rd Records : Type = 1 
       Title = "lmn,ggg" 
       flag= true 

Так вот я хотел бы манипулировать свою статистику переменная, поэтому переменная статистики должна содержать 5 записей, как показано ниже:

1st record : Type = 1 
      Title = "abc" 
      flag= true 


2nd record : Type = 1 
      Title = "ttt" 
      flag= true 

3rd Records : Type = 
      Title = "xyz" 
      flag= true 

4th Records : Type = 1 
       Title = "lmn" 
       flag= true 

5th Records : Type = 1 
       Title = "ggg" 
       flag= true 

Так как вы можете видеть, что я хотел бы иметь отдельную запись, если заголовок содержит записи, разделенные запятыми.

For eg:1st record : Type = 1 
      Title = "abc,ttt" 
      flag= true 

abc и ttt должны разбиваться на две записи, поскольку заголовок содержит записи, разделенные запятыми.

Это, как я пытался, но не смог сделать это:

statistics = statistics.Select(o => o.Title.Split(',')). 
          Select(
             t => new statistics 
             { 
              Type = t. // not working 
             } 
             ).ToList(); 

ответ

3

Кажется, что вы ищете Split (превратить одного разделенные запятойType на несколько пунктов) и SelectManyрасплющить коллекция):

List<statistics> source = .....; 

var result = source 
    .SelectMany(item => item.Title //split title 
    .Split(',') 
    .Select(title => new statistics() { 
     Type = item.Type, 
     Title = title, 
     Flag = item.Flag })) 
    .ToList(); // finally, materialize into list 
+0

Не должен 'item => item.Type' be 'item => item.Title'? – Guy

+0

@Guy: спасибо! это должно быть 'item => item.Title'. –

+0

Да, это сработало. Большое спасибо за любезную помощь и, пожалуйста, продолжайте помогать :) –

1

Вам нужно что-то вроде этого:

var result = statistics.Select(s => s.Title.Split(',') 
    .Select(x => new statistics {Type = s.Type, Flag = s.Flag, Title = x})) 
    .SelectMany(s=>s) 
    .ToList(); 

С этого выхода:

enter image description here

+0

Упомянуто о ваших добрых усилиях по оказанию мне помощи и, пожалуйста, продолжайте помогать таким образом :) –

1
var result = statistics.SelectMany(s => s.Title.Split(new char[] { ',' }). 
Select(t => new statistics() { Title = t, Flag = s.Flag, Type = s.Type })); 
+2

Хотя этот код может решить проблему, хороший ответ всегда должен содержат объяснение. – BDL

+0

Упомянуто о ваших добрых усилиях, чтобы помочь мне и, пожалуйста, продолжайте помогать таким образом :) –

1

Немного лучше с синтаксисом запросов, но не использовать то же имя statistics как для класса и списка:

var result = (from s in statistics 
       from a in s.Title.Split(',') 
       select new statistics(){ Type = s.Type, Title = a, Flag = s.Flag }).ToList(); 
+0

Упомянуто о ваших добрых усилиях по оказанию мне помощи и, пожалуйста, продолжайте помогать так: –

Смежные вопросы