Редактировать элемент в списке <className>с помощью linq - PullRequest
0 голосов
/ 06 февраля 2011

У меня есть общий список.

Он полон.

его имя - list1.

Мы хотим использовать LINQ, чтобы редактировать его элементы.

intput ------> textbox1.text (Введите список1)

введите class11 --------> string _number

Что такое кодИзменить?

Обновить

Вот что я хочу:

List lst= new List();

lst.Add("Shekhar1");

lst.Add("Shekhar2");

lst.Add("Shekhar3");

lst.Add("Shekhar4");

lst.Add("Shekhar5");

//code edit item (Shekhar3) -------> Shekhar88 //code to edit the item...?????

Вывод:

Shekhar1

Shekhar2

Shekhar88

Shekhar4

Shekhar5

для редактирования (обновить) элемент в общем списке:

1 - поиск с помощью linq в общий список -------> элемент выходного индекса

2-lst.RemoveAt (index)

3-lst.Insert (индекс, новый объект);

ок .... !!?пожалуйста, дайте мне код linq.(случай 1)

спасибо

Ответы [ 3 ]

4 голосов
/ 06 февраля 2011

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

В любом случае Вот пример длядать вам представление о том, как начать: (Запустить на LINQPAD)

List<string> lst= new List<string>();

lst.Add("Shekhar");
lst.Add("Shekhar");
lst.Add("Shekhar");
lst.Add("Shekhar");
lst.Add("Shekhar");

var edited = (from item in lst  
            select (item = "Pro")).ToList();
lst = edited;

lst.Dump();

Вывод:

Pro<br/>
Pro<br/>
Pro<br/>Pro<br/>Pro<br/>

Обновление

Ok на основена ваши предложения вот код, который будет работать

string search_string = "Shekhar3";
string replacement_string = "Shekhar88";
lst = (lst.Select( item => {
                          if(item == search_string) return item = replacement_string;
                          else return item;
                              })).ToList();
0 голосов
/ 16 мая 2014

Вы можете использовать Linq для выбора нового списка, но не для изменения существующего списка.Причина в том, что Linq имеет дело с перечислимыми, а не со списками внутри.Тот же код, который работает со списками, может работать с массивами или с функцией, которая возвращает перечислимые значения и значения yield s.Вот как можно заменить элемент, используя Select() (ideone) :

List<string> list = (new string[] { 
    "Shekhar1", "Shekhar2", "Shekhar3", "Shekhar4", "Shekhar5" }
).ToList();

string match = "Shekhar3";
string replace = "Shekhar88";
List<string> newList = list.Select(x => x == match ? replace : x).ToList();
list = newList;
foreach (string value in list) {
    Console.WriteLine("{0}", value);
}
0 голосов
/ 06 февраля 2011

Я думаю, вы можете иметь в виду, что вы хотите редактировать элемент в списке, основываясь на том, что вводит пользователь? IE: отфильтровать список объектов по некоторому предикату?

Если это так, вы можете сделать это с помощью linq следующим образом:

List<MyType> myList = PopulateList();

string key = textBox1.Text;
string newValue = "new value";

// If you only want a single item...
MyType item = (from item in myList
              where item.Key == key
              select key).FirstOrDefault();

// If you want a list of matching items
List<MyType> items = from item in myList
                     where item.Key == key
                     select key;

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

item.Value = newValue;

Или путем итерации:

foreach(MyType i in items)
{
    i.Value = newValue;
}

Вы можете добиться того же без LINQ, просто вызвав функцию .Where () с лямбда-выражением, например:

List<MyType> items = myList.Where(i => i.Key == key);
...