2015-09-15 2 views
-1

Я хочу запросить набор, который у меня уже есть, и создать новые объекты из результатов. Я также хочу, чтобы эти объекты были добавлены в существующий LinkedList.Создайте объект с результатами Enumerable.Where и добавьте их в список

То, что я прямо сейчас

var results = fulldata.Where(x => x.ImportantData == ImportanceLevel.HIGH); 

Теперь results содержит набор объектов данных, определенных понравившуюся это:

public class DataObject{ 
    public int x; 
    public int y; 
    public int DataType; 
} 

Я хотел бы написать с тем же синтаксисом (как Where()) эквивалент следующего кода:

var prunedResults = new LinkedList<KeyValuePair<int, int>>(); 
foreach(var res in results){ 
    if(res.DataType == DataTypeSpecial){ 
    prunedResults.Add(new KeyValuePair<int, int>(res.x, res.y)); 
    } 
} 

Я довольно новый для «современного» C#, поэтому, если вы также можете определить термины, используемые здесь, это поможет мне получить дальнейшие ответы Google. Я имею в виду, что это, по-видимому, называется LINQ, а вызов Where() использует выражение лямбда, но я мог бы ошибаться.

+1

R # должно предложить преобразование автоматически ... Вы действительно искали документацию на 'Enumerable.Select' (если вы уже нашли, что' конструктор LinkedList' принимает перечислим и у вас уже есть 'Where' работал out) .. –

+1

@AlexeiLevenkov Не все используют resharper :) – Rob

+0

Я работаю над cpp уже много лет, и большинство моих проектов «on-the-side» были на python, поэтому я знаю, что язык может делать такие вещи, как это Я просматривал код за эти годы, но мне так и не пришлось писать сам. – Eric

ответ

2
var prunedResults = new LinkedList<KeyValuePair<int, int>>(); 
//do other stuff to prunedResults 
prunedResults.AddRange(results.Where(x => x.DataType == DataTypeSpecial) 
    .Select(res=> new KeyValuePair<int, int>(res.x, res.y))); 
+0

AddRange кажется многообещающим, но как он узнает, как конвертировать из DataObject в KeyValuePair? – Eric

+2

@ Эрик вы можете проецировать его с помощью Select. например '.Where (x => ...). Выберите (res => new KeyValuePair (res.x, res.y))' –

+0

'LinkedList ' не имеет 'AddRange',' List ', однако, делает , –

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