2015-09-15 94 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; 
} 

我想用相同的語法來寫(如在哪裏()列表理解法)相當於下面的代碼:

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()調用使用lambda表達式,但我可能有點不對。

+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

@Eric你可以用Select進行投影。例如'.Where(x => ...)。Select(res => new KeyValuePair (res.x,res.y))' –

+0

'LinkedList '沒有'AddRange','List ',但是, 。 –

相關問題