You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写包含两种对立场景且带附加条件的LINQ Lambda表达式

问题解答

  1. 括号隔离条件完全生效,且是必须的
    C#中逻辑与&&的优先级高于逻辑或||,你原有写法未对「邮箱相同或UMCN相同」的条件加括号,会导致逻辑完全错误,必须用括号把这部分条件包裹为一个整体。
  2. 应该使用.Any()替代.Where()
    你的需求是判断是否存在符合条件的行,.Any()会在找到第一个匹配项时立即终止查询,性能远高于先筛选全量匹配项再判断是否为空,且直接返回布尔值,刚好匹配你的业务需求。
  3. 不需要使用Expression<Func<T>>做分支判断
    你的判断逻辑可以直接整合到单个谓词中,无需额外拆分表达式树,你的判断是正确的。

正确代码示例

bool isExist = scheduleService.GetAll()
    .Any(x => 
        // 基础通用条件:未删除、服务ID匹配、邮箱/UMCN匹配
        !x.Deleted
        && servicesIdDistinctedBy.Contains(x.ServiceId)
        && (x.EmailAddress == data.email || x.UMCN == data.UMCN)
        // 身份条件:满足注册用户要求 或 满足匿名用户要求
        && (
            // 注册用户条件
            x.IsConfirmed
            // 匿名用户条件
            || (x.IsAnonymous.Value 
                && (x.IsConfirmed 
                    || DateTime.UtcNow - x.DateTimeUtcRequestSend < Constants.ConfirmationTimeWindow)
               )
        )
    );
// isExist为true时返回不允许插入的提示即可

注意事项

如果你的IsAnonymous是可空类型,需要额外加x.IsAnonymous.HasValue的判空逻辑,避免运行时抛出空引用异常。

内容的提问来源于stack exchange,提问作者lonelydev101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:06:04