gpt4 book ai didi

sql - LINQ:拆分 Where OR 条件

转载 作者:行者123 更新时间:2023-12-04 19:06:38 25 4
gpt4 key购买 nike

所以我有以下条件

sessions = sessions.Where(y => y.session.SESSION_DIVISION.Any(x => x.DIVISION.ToUpper().Contains(SearchContent)) ||
y.session.ROOM.ToUpper().Contains(SearchContent) ||
y.session.COURSE.ToUpper().Contains(SearchContent));

我想根据字符串是否为空将其拆分为多行,例如:
if (!String.IsNullOrEmpty(Division)) {
sessions = sessions.Where(y => y.session.SESSION_DIVISION.Any(x => x.DIVISION.ToUpper().Contains(SearchContent)));
}

if (!String.IsNullOrEmpty(Room)) {

// this shoudl be OR
sessions = sessions.Where(y => y.session.ROOM.ToUpper().Contains(SearchContent));
}

if (!String.IsNullOrEmpty(course)) {

// this shoudl be OR
sessions = sessions.Where(y => y.session.COURSE.ToUpper().Contains(SearchContent));
}

如果您注意到我想根据 Room、course 和 Division 字符串是否为空添加多个 OR 条件拆分。

最佳答案

有几种方法可以解决这个问题:

  • 每次将“where”应用于原始查询,然后对结果查询进行 Union()
    var queries = new List<IQueryable<Session>>();
    if (!String.IsNullOrEmpty(Division)) {
    queries.Add(sessions.Where(y => y.session.SESSION_DIVISION.Any(x => x.DIVISION.ToUpper().Contains(SearchContent))));
    }

    if (!String.IsNullOrEmpty(Room)) {

    // this shoudl be OR
    queries.Add(sessions.Where(y => y.session.ROOM.ToUpper().Contains(SearchContent)));
    }

    if (!String.IsNullOrEmpty(course)) {

    // this shoudl be OR
    queries.Add(sessions.Where(y => y.session.COURSE.ToUpper().Contains(SearchContent)));
    }

    sessions = queries.Aggregate(sessions.Where(y => false), (q1, q2) => q1.Union(q2));
  • 执行表达式操作以将 lambda 表达式的主体合并在一起,并由 OrElse 表达式连接。 (复杂,除非您已经有库可以帮助您:加入主体后,您还必须遍历表达式树以替换参数表达式。它可能会变得粘滞。有关详细信息,请参阅 this post
  • 使用 PredicateBuilder 之类的工具为您做 #2。
  • 关于sql - LINQ:拆分 Where OR 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23093740/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com