【问题标题】:In LINQ, how to use Int? optionally in where condition在 LINQ 中,如何使用 Int?可选择在 where 条件下
【发布时间】:2020-12-14 15:58:08
【问题描述】:

我有一个 LINQ 脚本,并且我得到了可选的 SiteId。所以如果 SiteId = 0 或 int,我想选择所有记录? else 获取给定值的 siteId 的记录

            var queryResult = (from schedule in GetAll<EziScheduleEntity>()
                               where 
                                    schedule.StartTime < endTime && schedule.EndTime > startTime
                                 && schedule.SiteId == SiteId  //this SiteId is of Type int? 
                               select schedule
                                   );

..

   && schedule.SiteId == (string.IsNullOrEmpty(stringSiteId) == false? stringSiteId ||  )

【问题讨论】:

  • 你可以使用||:(schedule.SiteId == 0 || schedule.SiteId == SiteId)
  • 我无法正确语法,请您提供完整的。谢谢
  • 我已经尝试如下但不确定我怎么说忽略条件 SiteId 中没有值?
  • && schedule.SiteId == (string.IsNullOrEmpty(stringSiteId) == false?stringSiteId || )
  • &amp;&amp; schedule.SiteId == SiteId.HasValue ? SiteId : 0) 默认值为零。

标签: linq .net-core-3.1 ef-core-3.1


【解决方案1】:

如果你的意思是局部变量 SiteId 的类型是 int?,那么只需测试它的值:

var queryResult = (from schedule in GetAll<EziScheduleEntity>()
                   where
                        schedule.StartTime < endTime &&
                        schedule.EndTime > startTime &&
                        (SiteId.HasValue ? schedule.SiteId == SiteId : true)
                   select schedule
                  );

或者,您可以使用布尔逻辑来完成同样的事情:

var queryResult = (from schedule in GetAll<EziScheduleEntity>()
                   where
                        schedule.StartTime < endTime &&
                        schedule.EndTime > startTime &&
                        (!SiteId.HasValue || schedule.SiteId == SiteId)
                   select schedule
                  );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 2016-04-06
    • 1970-01-01
    相关资源
    最近更新 更多