2012-09-13 78 views
1

我一直在試圖通過讀什麼StackOverflow上和信息很安靜有助於解決這個問題,但我似乎無法實現,我發現的東西。基於2 LINQ列表中選擇1個對象瓦爾

我有一個數據表,我想檢查是否在匹配2個變量我提供該數據集存在的條目。

public void SaveWaveDataFor(List<WaveData> newData) 
{ 
    foreach(WaveData wave in newData) 
    { 
     //WaveData item = data.FirstOrDefault(o => o.id == wave.id); 
     var item = data.Select(o => new{ wave.id, wave.waveNumber }); 
     Debug.Log(item.id); 
    } 
} 

回答

1

如果你想獲得的所有匹配兩個條件的wave的對象,你可以使用一個Where()條款:

// items will be an IEnumerable<WaveData> containing the matching objects 
// where id == matchId and waveNumber == matchNumber 
var items = data.Where(o => o.id == matchId && o.waveNumber == matchNumber); 

Select()條款通常用來匹配的元素轉化成對象另一種類型。

+0

我改變了Where.FirstOrDefault,它似乎在伎倆! –

0

註釋掉的線實際上更好。

FirstOrDefault將返回如果沒有匹配的項目第一個匹配項或空。

在另一方面,你可以使用任何(),如果你只是想知道,如果一個項目存在。 任何(x => x.Id == matchId)只有在列表包含具有匹配Id的項目時纔會返回true,否則返回false。

你會做這樣的:

public void SaveWaveDataFor(List<WaveData> newData) 
{ 
    int waveIdToMatch = 1; 
    int waveNumberToMatch = 2; 
    foreach(WaveData wave in newData) 
    { 
     WaveData item = data.FirstOrDefault(o => o.id == waveIdToMatch && o.waveNumber == waveNumberToMatch); 
     //if a match exists, item will not be a WaveData object, otherwise it will be null 
     Debug.Log(item.id); 
    } 
} 
0

如果你只是要檢查條目是否存在,或者沒有,那麼你可以從LINQ的使用Any操作。

bool recordsExists = data.Any(o => o.id == matchId && o.waveNumber == matchNumber); 
相關問題