【发布时间】:2020-02-20 15:45:23
【问题描述】:
我有一个来自数据库的集合。并且在集合中有一个 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 是 switch case,像这样:
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
那么 this 的返回类型是什么:
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();
}
【问题讨论】:
-
使用:EcheqSubmissionStatusApi status = new EcheqSubmissionStatusApi() ;
-
StatusDbToApi 不应是静态方法,而是 EcheqSubmission 类的方法部分。状态 = submit.GetStatusBasedOnValidity()
-
好吧,但总觉得这不是好看的代码。不是吗?
-
这没有意义,因为总是返回相同的值。您要么必须将值作为方法的参数,要么是 class 的静态成员,要么在方法本身中动态分配值。
-
看来您实际上想将
submission.ValidUntilUtc传递给StatusDbToApi方法以使用它。
标签: c# entity-framework linq .net-core