Eri*_*man 5 .net sql linq where-clause multiple-conditions
所以我有以下条件
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));
Run Code Online (Sandbox Code Playgroud)
我想根据一个字符串是否为空将其分成多行,例如:
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));
}
Run Code Online (Sandbox Code Playgroud)
如果您发现我想添加多个OR条件,则根据Room,course和Division字符串是否为空来拆分。
有几种方法可以解决这个问题:
每次将“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));
Run Code Online (Sandbox Code Playgroud)执行表达式操作,将 lambda 表达式的主体合并在一起,并通过OrElse表达式连接。(除非你已经有库来帮助你,否则很复杂:加入主体后,你还必须遍历表达式树来替换参数表达式。它可能会变得粘滞。有关详细信息,请参阅这篇文章。
| 归档时间: |
|
| 查看次数: |
664 次 |
| 最近记录: |