首页 > 解决方案 > 开关情况下的条件

问题描述

我有一个来自数据库的集合。并且在集合中有一个 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();


        }

标签: c#entity-frameworklinq.net-core

解决方案


您有多种选择来解决您的问题;

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


推荐阅读