我到处搜索,并没有真正找到一个明确的答案,什么时候你想使用. first,什么时候你想使用. firstordefault与LINQ。
什么时候你想用。first ?只有当你想捕捉异常,如果没有结果返回哪里?
var result =列表。Where(x => x == "foo").First();
什么时候使用。firstordefault ?当你总是想默认类型,如果没有结果?
var result =列表。Where(x => x == "foo").FirstOrDefault();
说到这,那塔克呢?
var result =列表。Where(x => x == "foo").Take(1);
.First will throw an exception when there are no results. .FirstOrDefault won't, it will simply return either null (reference types) or the default value of the value type. (e.g like 0 for an int.) The question here is not when you want the default type, but more: Are you willing to handle an exception or handle a default value? Since exceptions should be exceptional, FirstOrDefault is preferred when you're not sure if you're going to get results out of your query. When logically the data should be there, exception handling can be considered.
Skip()和Take()通常在设置结果分页时使用。(比如显示前10个结果,接下来的10个在下一页,等等)
这种类型的函数属于元素操作符。下面定义了一些有用的元素操作符。
第一/ FirstOrDefault
去年/ LastOrDefault
单/ SingleOrDefault
当需要根据特定条件从序列中选择单个元素时,我们使用元素操作符。这里有一个例子。
List<int> items = new List<int>() { 8, 5, 2, 4, 2, 6, 9, 2, 10 };
First()操作符返回序列满足条件后的第一个元素。如果没有找到元素,则抛出异常。
Int result = items。Where(item => item == 2).First();
FirstOrDefault()操作符返回满足条件后序列的第一个元素。如果没有找到元素,则返回该类型的默认值。
Int result1 = items。Where(item => item == 2).FirstOrDefault();