我有一个对象列表,我需要在其上执行LINQ查询以找到一些特定的对象。
class MyClass
{
int id;
int someOtherIdbutNotUnique;
}
var ls = myObjectList.Where(x => x.id==specificId
&& x.someOtherIdbutNotUnique == someOtherSpecificId)
.FirstOrDefault();
但是这个查询不会返回MyClass对象。此外,我应该如何更改查询以获取满足给定条件的MyClass对象列表。同时,想知道是否有任何好的LINQ教程,我可以从头开始。
答案 0 :(得分:0)
LINQ扩展方法使用谓词来过滤列表。 Where
,First
,FirstOrDefault
,Single
,SingleOrDefault
(仅举几例)都采用相同的谓词。
用于过滤列表的一些Lambda表达式。
public class MyClass
{
public int Id {get;set;}
public int Other {get;set;}
}
// myClasses is a populated list <-- this needs to be checked.
var result = myClasses.FirstOrDefault(x => x.Id == specificId && x.Other == specificOther);
Result
现在应包含单个MyClass
个实例或null
个实例。
如果省略OrDefault()
,那么如果代码找不到与谓词匹配的实例,则会抛出错误。
如果谓词返回多个项目,则First
将选择第一个项目。如果将First
交换为Single
并且谓词返回多个项目,则会抛出异常。
要检查的事项
您执行查询的列表包含实例列表。
变量specificId
和specificOther
具有列表中存在的值。你要做的最后一件事就是想知道它为什么不返回任何东西,实际上它正在按照你的要求进行操作,而失败的原因是你用来查询错误的值。