LINQ - 查询不返回对象列表中的对象

时间:2015-04-29 10:19:56

标签: c# linq

我有一个对象列表,我需要在其上执行LINQ查询以找到一些特定的对象。

class MyClass
{ 
    int id;
    int someOtherIdbutNotUnique;
}

var ls = myObjectList.Where(x => x.id==specificId 
                          && x.someOtherIdbutNotUnique == someOtherSpecificId)
                     .FirstOrDefault();

但是这个查询不会返回MyClass对象。此外,我应该如何更改查询以获取满足给定条件的MyClass对象列表。同时,想知道是否有任何好的LINQ教程,我可以从头开始。

1 个答案:

答案 0 :(得分:0)

LINQ扩展方法使用谓词来过滤列表。 WhereFirstFirstOrDefaultSingleSingleOrDefault(仅举几例)都采用相同的谓词。

用于过滤列表的一些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并且谓词返回多个项目,则会抛出异常。

要检查的事项

  1. 您执行查询的列表包含实例列表。

  2. 变量specificIdspecificOther具有列表中存在的值。你要做的最后一件事就是想知道它为什么不返回任何东西,实际上它正在按照你的要求进行操作,而失败的原因是你用来查询错误的值。