📜  LINQ SingleOrDefault方法(1)

📅  最后修改于: 2023-12-03 15:02:41.431000             🧑  作者: Mango

LINQ SingleOrDefault 方法

LINQ SingleOrDefault 方法用于从序列中获取单个元素,如果序列为空,则返回默认值或null。如果序列中有多个元素,则会抛出异常。

public static TSource SingleOrDefault<TSource>(this IEnumerable<TSource> source);
使用方法

SingleOrDefault 方法可用于任何实现了 IEnumerable 接口的对象,如 List、Array、Dictionary<T, TValue> 等。

下面是使用 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