📅  最后修改于: 2023-12-03 15:02:41.431000             🧑  作者: Mango
LINQ SingleOrDefault 方法用于从序列中获取单个元素,如果序列为空,则返回默认值或null。如果序列中有多个元素,则会抛出异常。
public static TSource SingleOrDefault<TSource>(this IEnumerable<TSource> source);
SingleOrDefault 方法可用于任何实现了 IEnumerable
下面是使用 SingleOrDefault 方法查询数组中是否有某个元素的示例:
int[] numbers = { 1, 2, 3, 4, 5 };
int numberToFind = 3;
int result = numbers.SingleOrDefault(n => n == numberToFind);
if (result != default(int))
{
Console.WriteLine($"Found number {result}.");
}
else
{
Console.WriteLine("Number not found.");
}
上述代码将在数组 numbers 中查找数字 3,并返回找到的数字。如果找不到,则返回默认值,即 0。
SingleOrDefault 方法经常在查询操作中使用,例如在从数据库或其他数据存储中读取数据时使用。以下是使用 SingleOrDefault 方法查询数据库中用户的示例:
public User GetUserById(int userId)
{
using (var dbContext = new MyDbContext())
{
return dbContext.Users.SingleOrDefault(u => u.Id == userId);
}
}
上述代码通过 LINQ 查询数据库中的 User 表,通过 Id 获取单个用户。如果没有找到用户,则返回 null。
SingleOrDefault 方法在以下情况下会抛出异常:
以下是处理这些异常情况的示例:
try
{
// 查询多个符合条件的元素
int[] numbers = { 1, 2, 3, 4, 5 };
int numberToFind = 2;
int result = numbers.SingleOrDefault(n => n == numberToFind);
}
catch (InvalidOperationException ex)
{
Console.WriteLine(ex.Message);
}
try
{
// 查询空序列
int[] emptyArray = { };
int result = emptyArray.SingleOrDefault();
}
catch (InvalidOperationException ex)
{
Console.WriteLine(ex.Message);
}
// 指定默认返回值
int[] emptyArray = { };
int result = emptyArray.SingleOrDefault(n => n == 0);
Console.WriteLine(result); // 0