c# - 开关情况下的条件
问题描述
我有一个来自数据库的集合。并且在集合中有一个 vceq 具有的检查女巫状态。
集合是这样的:
List<EcheqSubmissionInfoApi> submissions = await _patientDbContext.EcheqSubmissions
.Where(s => s.AssignedToId == participantId)
.OrderBy(s => (int)s.Status)
.ThenByDescending(s => s.AssignedOnUtc)
.Select(i => ConvertToPartialApi(i)).ToListAsync();
ConvertToPartialApi 方法如下所示:
private static EcheqSubmissionInfoApi ConvertToPartialApi(EcheqSubmission submission)
{
return new EcheqSubmissionInfoApi
{
Id = submission.Id,
Status = submission.Status.StatusDbToApi(),
DefinitionId = submission.DefinitionId,
SubmittedOnUtc = submission.SubmittedOnUtc,
AssignedByOrgId = submission.AssignedByOrgId,
AssignedByProfId = submission.AssignedByProfId,
AssignedOnUtc = submission.AssignedOnUtc,
AssignedToId = submission.AssignedToId,
ValidUntilUtc = submission.ValidUntilUtc,
CurrentPage = submission.CurrentPage,
Progress = submission.Progress
};
}
而 StatusDbToApi 是开关盒,如下所示:
public static EcheqSubmissionStatusApi StatusDbToApi(this EcheqSubmissionStatus dbStatus)
{
EcheqSubmissionStatusApi status;
EcheqSubmissionInfoApi echeqSubmissionInfoApi;
if (echeqSubmissionInfoApi.ValidUntilUtc < DateTime.Now)
{
return EcheqSubmissionStatusApi.Expired;
}
else
{
switch (dbStatus)
{
case EcheqSubmissionStatus.New:
status = EcheqSubmissionStatusApi.New;
break;
case EcheqSubmissionStatus.Active:
status = EcheqSubmissionStatusApi.Active;
break;
case EcheqSubmissionStatus.Submitted:
status = EcheqSubmissionStatusApi.Submitted;
break;
//case EcheqSubmissionStatus.Expired:
// status = EcheqSubmissionStatusApi.Expired;
// break;
default:
throw new ArgumentOutOfRangeException(nameof(dbStatus), dbStatus, "Not a valid status enum");
}
}
return status;
}
但现在我想为过期状态建立一个检查。像这样:
if (echeqSubmissionInfoApi.ValidUntilUtc < DateTime.Now)
{
return EcheqSubmissionStatusApi.Expired;
}
但是当然你会在那一行得到一个错误,因为它是未分配的。
但是如何正确地做呢?
谢谢
或者如何重构这个?
如果我这样做:
EcheqSubmissionInfoApi echeqSubmissionInfoApi = new EcheqSubmissionInfoApi();
if (echeqSubmissionInfoApi.ValidUntilUtc < DateTime.Now)
{
return EcheqSubmissionStatusApi.Expired;
}
ValidUntilUtc
始终为空
好的,我把这个:
public class EcheqSubmission{
public EcheqSubmissionStatusApi StatusDbToApi(EcheqSubmissionStatus dbStatus, EcheqSubmissionInfoApi echeqSubmissionInfoApi)
{
EcheqSubmissionStatusApi status;
// EcheqSubmissionInfoApi echeqSubmissionInfoApi = new EcheqSubmissionInfoApi();
if (echeqSubmissionInfoApi.ValidUntilUtc < DateTime.Now)
{
return EcheqSubmissionStatusApi.Expired;
}
else
{
switch (dbStatus)
{
case EcheqSubmissionStatus.New:
status = EcheqSubmissionStatusApi.New;
break;
case EcheqSubmissionStatus.Active:
status = EcheqSubmissionStatusApi.Active;
break;
case EcheqSubmissionStatus.Submitted:
status = EcheqSubmissionStatusApi.Submitted;
break;
//case EcheqSubmissionStatus.Expired:
// status = EcheqSubmissionStatusApi.Expired;
// break;
default:
throw new ArgumentOutOfRangeException(nameof(dbStatus), dbStatus, "Not a valid status enum");
}
}
return status;
}
}
在课堂里:
EcheqSubmission
那么这个的返回类型是什么:
private static EcheqSubmissionInfoApi ConvertToPartialApi(EcheqSubmission submission)
{
var result = new EcheqSubmissionInfoApi
{
Id = submission.Id,
Status = submission.Status.StatusDbToApi(),
DefinitionId = submission.DefinitionId,
SubmittedOnUtc = submission.SubmittedOnUtc,
AssignedByOrgId = submission.AssignedByOrgId,
AssignedByProfId = submission.AssignedByProfId,
AssignedOnUtc = submission.AssignedOnUtc,
AssignedToId = submission.AssignedToId,
ValidUntilUtc = submission.ValidUntilUtc,
CurrentPage = submission.CurrentPage,
Progress = submission.Progress
};
result.Status = submission.Status.StatusDbToApi();
}
解决方案
您有多种选择来解决您的问题;
1)submission.ValidUntilUtc
作为参数输入StatusDbToApi()
,以便您可以简单DateTime
地检查
2)先创建你的EcheqSubmissionInfoApi
不填状态,创建后设置状态:
var result = new EcheqSubmissionInfoApi
{
Id = submission.Id,
DefinitionId = submission.DefinitionId,
SubmittedOnUtc = submission.SubmittedOnUtc,
AssignedByOrgId = submission.AssignedByOrgId,
AssignedByProfId = submission.AssignedByProfId,
AssignedOnUtc = submission.AssignedOnUtc,
AssignedToId = submission.AssignedToId,
ValidUntilUtc = submission.ValidUntilUtc,
CurrentPage = submission.CurrentPage,
Progress = submission.Progress
};
result.Status = submission.Status.StatusDbToApi();
3)重写为返回正确状态StatusDbToApi
的非静态方法。EcheqSubmissionStatus
推荐阅读
- sql - 从表中的多个重复项中删除特定记录
- sql-server-2008 - 清理一张非常大的桌子
- windows - GitBash 在 Windows 10 中自动卸载
- html - 如何创建具有实线边框的元素网格?
- node.js - MongoDB 搜索用户:使用正则表达式根据名称进行过滤
- asp.net-core - IIS 上的 .NET Core 2.2 API 如果尝试连接到 Db 则会返回错误,但其他情况下工作正常
- json - 用尖叫的青蛙提取 Json 数据
- azure-cognitive-search - 搜索带有特殊字符的字段 .net sdk 版本 5.0.3
- c++ - 处理 3D 数组的边缘和角落情况的方法
- dart - 例外:不支持的操作:Platform._localHostname