1

我一直在尝试通过阅读 StackOverflow 上的内容来解决这个问题,这些信息很有帮助,但我似乎无法实现我发现的东西。

我有一个数据列表,我想检查数据集中是否存在与我提供的 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 );
    }
}
4

3 回答 3

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()子句通常用于将匹配的元素转换为另一种类型的对象。

于 2012-09-14T00:04:12.747 回答
0

如果您只想检查条目是否存在,那么您可以使用AnyLinq 中的 Operator。

bool recordsExists = data.Any(o => o.id == matchId && o.waveNumber == matchNumber); 
于 2012-09-14T05:19:20.813 回答
0

实际上,注释掉的行对此更好。

FirstOrDefault 将返回第一个匹配项,如果没有项匹配,则返回 null。

另一方面,如果您只想知道某个项目是否存在,则可以使用 Any()。Any(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 );
    }
}
于 2012-09-14T00:15:53.230 回答