2014-03-05 49 views
0

我有一個像列表<object>自我篩選

List<VoieData> listVoieData = new List<VoieData>(); 

和VoieData類名單,我有:

public class VoieData 
{ 
    public int Depart { set; get; } 
    public int Arrive { set; get; } 
    public int DistanceDepart { set; get; } 
    public int DistanceArrive { set; get; } 
} 

因爲我有我想只考慮我的所有Depart數量巨大的價值,我想篩選listVoieData,發現Arrive只與 Depart

,比如我有

listVoieData.Select(p=>p.Depart).ToList()= List<int>{1,2,3}; 
listVoieData.Select(p=>p.Arrive).ToList()= List<int>{1,2,3,4,5}; 

我需要扔掉整個VoieData包含{4,5}爲Arrive

現在我soulution是這樣的,但它不正確;

List<VoieData> listVoieDataFilter = listVoieData .Join(listVoieData , o1 => o1.Arrive, o2 => o2.Depart, (o1, o2) => o1).ToList(); 

對不起,令人困惑的問題; 我想刪除與列表中的所有Depart不同的到達,並返回新的 列表

它不僅在一個VoieData;

Arrive!=Depart 

感謝

+0

是否要刪除所有'voieData',其中'到達!=出發',或所有那些'到達'不同於**所有** **所有**'voieData'的出發? –

+0

我們需要看看你在'listVoieData'中放入了什麼,以便爲你的示例輸出開始,以表示對我們來說什麼。沒有輸入的輸出不是很有幫助。 – Servy

+0

@JuliánUrbano是的我想刪除抵達與所有出發 – WickedFAN

回答

1

我想你想刪除的所有對象,其中Arrive不在的任何Depart任何的對象。在這種情況下,首先獲得所有Depart然後Arrive過濾:

HashSet<int> allDepart = new HashSet<int>(listVoieData.Select(x => x.Depart)); 
var result = listVoieData.Where(v => !allDepart.Contains(v.Arrive)) 

我們使用HashSet<int>效率。

1

這將是使用LINQ的典型案例。

類似:

var res = from data in listVoieData 
      where data.Depart == data.Arrive 
      select data; 

然後有選擇地只使用res.ToArray()運行查詢和獲取數組。

1

使用LINQ Where

var records = listVoieData.Where(x => x.Arrive == x.Depart); 

這會返回結果其中兩個ArriveDepart是相同的。

-1

既然你說你想:

我想刪除到達其不同於所有的出發

這可以重新表述爲,「集合所有的除了那些在一組出發的」,翻譯非常漂亮成以下LINQ查詢抵達:

var arrivalsWithNoDepartures = listVoieData.Select(p=>p.Arrive) 
    .Except(listVoieData.Select(p=>p.Depart));