gpt4 book ai didi

c# - 未找到记录时,为不可为空的列返回 null

转载 作者:行者123 更新时间:2023-12-04 01:17:54 26 4
gpt4 key购买 nike

实体类型

public class Person
{
public Guid Id { get; set; }

public string Name { get; set; }

public Guid TeamId { get; set; } // mandatory foreign key

public virtual Team Team { get; set; } // navigation property

// dozen other properties
}

public class Team
{
public Guid Id { get; set; }

public string Name { get; set; }
}

我有一个方法可以返回给定人员 ID 的团队 ID。方法的返回类型定义为 Guid?。可为空,因为给定的人员 ID 可能不存在于数据库中。

public Task<Guid?> GetTeamIdFor(Guid personId)
{
using (var context = _createDbContext())
{
return await context.Persons
.Where(p => p.Id == personId)
.Select(p => p.TeamId)
.FirstOrDefault();
}
}

问题是 FirstOrDefault() 返回 Guid 类型(TeamId 列的类型)的默认值。因此,不是返回 null 方法而是返回空 Guid 00000000-0000-0000-0000-000000000000

我可以通过加载整个实体来达到预期的结果,但我尽量避免加载额外的、不需要的数据。

var person = await context.FindAsync(personId);
return person?.TeamId;

我可以在返回值之前检查空的 Guid

var teamId = await context.Where(p => p.Id = personId).Select(p => p.TeamId).FirstOrDefaultAsync();
return teamId == Guid.Empy ? default(Guid?) : teamId;

问题:有没有一种方法可以使查询返回可为空的 Guid,而无需加载整个实体或结果具体化后无需操作?

最佳答案

您可以将 TeamId 转换为可为 null 的 Guid,这允许 FirstOrDefault 在未找到任何内容时返回 null:

Guid? id = context.Persons
.Where(p => p.Id == personId)
.Select(p => (Guid?)p.TeamId)
.FirstOrDefault();

关于c# - 未找到记录时,为不可为空的列返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63029891/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com