C# 使用基于2个变量的LINQ从列表中选择1个对象
我一直试图通过阅读StackOverflow上的内容来解决这个问题,这些信息非常有用,但我似乎无法实现我发现的东西 我有一个数据列表,我想检查数据集中是否存在与我提供的两个变量匹配的条目C# 使用基于2个变量的LINQ从列表中选择1个对象,c#,linq,list,select,C#,Linq,List,Select,我一直试图通过阅读StackOverflow上的内容来解决这个问题,这些信息非常有用,但我似乎无法实现我发现的东西 我有一个数据列表,我想检查数据集中是否存在与我提供的两个变量匹配的条目 public void SaveWaveDataFor( List<WaveData> newData ) { foreach(WaveData wave in newData) { //WaveData item = data.FirstOrDefault( o =
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 );
}
}
public void SaveWaveDataFor(列出新数据)
{
foreach(新数据中的WaveData波形)
{
//WaveData项=data.FirstOrDefault(o=>o.id==wave.id);
var item=data.Select(o=>new{wave.id,wave.waveNumber});
Debug.Log(item.id);
}
}
如果要获取符合两个条件的所有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);
//项将是包含匹配对象的IEnumerable
//其中id==matchId和waveNumber==matchNumber
var items=data.Where(o=>o.id==matchId&&o.waveNumber==matchNumber);
Select()
子句通常用于将匹配的元素转换为另一种类型的对象。如果要获得符合两个条件的所有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);
//项将是包含匹配对象的IEnumerable
//其中id==matchId和waveNumber==matchNumber
var items=data.Where(o=>o.id==matchId&&o.waveNumber==matchNumber);
Select()
子句通常用于将匹配的元素转换为另一种类型的对象。实际上,注释掉的行更好
FirstOrDefault将返回第一个匹配项,如果没有匹配项,则返回null
另一方面,如果只想知道某个项是否存在,可以使用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 );
}
}
public void SaveWaveDataFor(列出新数据)
{
int waveIdToMatch=1;
int waveNumberToMatch=2;
foreach(新数据中的WaveData波形)
{
WaveData项=data.FirstOrDefault(o=>o.id==waveIdToMatch&&o.waveNumber==waveNumberToMatch);
//如果存在匹配项,则该项将不是WaveData对象,否则将为null
Debug.Log(item.id);
}
}
实际上,注释掉的行更好
FirstOrDefault将返回第一个匹配项,如果没有匹配项,则返回null
另一方面,如果只想知道某个项是否存在,可以使用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 );
}
}
public void SaveWaveDataFor(列出新数据)
{
int waveIdToMatch=1;
int waveNumberToMatch=2;
foreach(新数据中的WaveData波形)
{
WaveData项=data.FirstOrDefault(o=>o.id==waveIdToMatch&&o.waveNumber==waveNumberToMatch);
//如果存在匹配项,则该项将不是WaveData对象,否则将为null
Debug.Log(item.id);
}
}
如果您只想检查条目是否存在,则可以使用Linq中的任何
运算符
bool recordsExists = data.Any(o => o.id == matchId && o.waveNumber == matchNumber);
如果您只想检查条目是否存在,那么可以使用Linq中的
Any
操作符
bool recordsExists = data.Any(o => o.id == matchId && o.waveNumber == matchNumber);
我换了位置。FirstOrDefault,它似乎很管用!我换了位置。FirstOrDefault,它似乎很管用!