2024-11-09 05:00:06

LINQ单对第一

LINQ:

当我确定查询将返回一条记录时,使用Single()操作符比First()更有效吗?

有区别吗?


当前回答

如果发现匹配条件的记录超过一条,Single将抛出异常。 First将始终从列表中选择第一条记录。如果查询只返回一条记录,您可以使用First()。

如果集合为空,两者都会抛出InvalidOperationException异常。 或者你也可以使用SingleOrDefault()。如果列表为空,则不会抛出异常

其他回答

如果不特别希望在有多个项的事件中抛出异常,请使用First()。

两者都很有效率,就拿第一项来说。First()的效率稍微高一些,因为它不需要检查是否有第二个项。

唯一的区别是,Single()期望枚举中只有一个项开始,如果有多个项,则会抛出异常。如果您特别希望在这种情况下抛出异常,则使用. single()。

你可以尝试简单的例子来得到不同。 异常将在第3行抛出;

        List<int> records = new List<int>{1,1,3,4,5,6};
        var record = records.First(x => x == 1);
        record = records.Single(x => x == 1);

如果发现匹配条件的记录超过一条,Single将抛出异常。 First将始终从列表中选择第一条记录。如果查询只返回一条记录,您可以使用First()。

如果集合为空,两者都会抛出InvalidOperationException异常。 或者你也可以使用SingleOrDefault()。如果列表为空,则不会抛出异常

单()

返回查询的单个特定元素 When Use:如果恰好需要1个元素;不是0或大于1。如果列表为空或包含多个元素,则会抛出异常"Sequence contains more than one element"

SingleOrDefault ()

返回查询的单个特定元素,如果没有找到结果,则返回默认值 当使用:当需要0或1个元素时。如果列表有2个或更多项,它将抛出异常。

第()

返回带有多个结果的查询的第一个元素。 When Use:当需要1个或多个元素,而您只需要第一个元素时。如果列表中不包含元素,它将抛出异常。

FirstOrDefault ()

Returns the first element of a list with any amount of elements, or a default value if the list is empty. When Use: When multiple elements are expected and you want only the first. Or the list is empty and you want a default value for the specified type, the same as default(MyObjectType). For example: if the list type is list<int> it will return the first number from the list or 0 if the list is empty. If it is list<string>, it will return the first string from the list or null if the list is empty.

如果我回忆,Single()检查在第一个元素之后是否有另一个元素(如果是这样,则抛出异常),而first()在得到它之后停止。如果序列为空,两者都会抛出异常。

就我个人而言,我总是使用First()。