【问题标题】:Show only active records and remove expired records using linq c#仅显示活动记录并使用 linq c# 删除过期记录
【发布时间】:2021-03-02 09:22:10
【问题描述】:

RecordExpiration 是一个日期时间字段。我必须只显示未过期的活动记录。

var triggerEvents = ctx.CDB.Admin_FlexTriggerEvents.AsQueryable().Where(x => x.RecordID == RecordID)
                         .Select(x => new TriggerEvent
                         {
                             RecordID = x.RecordID,
                             FlexTriggerType_RecordID = x.FlexTriggerType_RecordID,
                             Condition = x.FlexTriggerType.Condition,
                             MergeData = x.FlexTriggerType.FlexTriggerEntityType.MergeData,
                             FlexTriggerEventNotifications = x.FlexTriggerEventNotifications,
                             FlexTriggerEventEmployeeMessages = x.FlexTriggerEventEmployeeMessages,
                             FlexTriggerEventNudgeEmails = x.FlexTriggerEventNudgeEmails,
                             FlexTriggerEventDataExchanges = x.FlexTriggerEventDataExchanges,
                             FlexTriggerEventCreateGroupComms = x.FlexTriggerEventCreateGroupComms,
                             Name = x.Name,
                             RecordExpiration = x.RecordExpiration
                           
                         }).ToList();

不确定在哪里可以添加条件。今天之前的所有记录都可以进入过期记录。

【问题讨论】:

  • 添加到 WHERE 条件:x.RecordExpiration <= DateTime.Now。顺便说一句,您当前正在使用条件x => x.RecordID == RecordID,这将始终只返回一条记录 (=RecordID),而不是记录列表
  • @TheMixy - 我猜 RecordID 不是事件记录的 id,而是某些关系的 id。
  • 阅读一些有关如何使用 linq docs.microsoft.com/en-us/dotnet/csharp/linq 的基础知识可能会有所帮助
  • @ChristophLütjen:可能是……Shenal 应该详细说明一下

标签: c# asp.net-mvc linq


【解决方案1】:

我必须只显示未过期的活动记录。

您忘记告诉我们什么是活动记录。你怎么知道一个记录没有过期。是在财产RecordExpiration 中吗?

int recordId = ...
var activeNonExpiredRecords = ctx.CDB.Admin_FlexTriggerEvents
    .Where(flexTriggerEvent => flexTriggerEvent.RecordID == recordID
        && !flexTriggerEvent.RecordExpiration
        && flexTriggerEvent.IsActive)
    .Select(record => ...)

简而言之:在所有 FlexTriggerEvents 中,只保留那些属性 RecordId 的值等于 recordId 的值,并且属性 RecordExpiration 的值是假的,并且 IsActive 的值是真值的 FlexTriggerEvents。从剩余的记录中,选择...

如果您没有 IsActive 属性,请创建一个表示 IsActive 的布尔表达式:

例如:如果不到一周是活跃的:

&& DateTime.Today - flexTriggerEvent.EventDate < TimeSpan.FromDays(7)

【讨论】:

  • 您忘记告诉我们什么是活动记录。你怎么知道一个记录没有过期。是在属性 RecordExpiration 中吗? >>> 今天之前的记录是过期记录。 Record Expiration 没有任何属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-14
  • 2018-07-12
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
相关资源
最近更新 更多