gpt4 book ai didi

c# - 我的 lambda 表达式没有产生我预期的结果

转载 作者:太空宇宙 更新时间:2023-11-03 21:42:43 28 4
gpt4 key购买 nike

courses = courses.Where(
c => queryParameters.ShowInActive || c.Flags.Contains((ulong)CourseFlags.Active)
&&
(queryParameters.AuthorId <= 0 ||
(c.Authors != null && c.Authors.Exists(a => a.ID == queryParameters.AuthorId)))
&&
(queryParameters.CategoryIDs == null || queryParameters.CategoryIDs.Count == 0 ||
(c.Tags != null && c.Tags.Any(t => queryParameters.CategoryIDs.Contains(t.ID)))
&&
queryParameters.CourseIDs == null || queryParameters.CourseIDs.Count == 0 ||
queryParameters.CourseIDs.Contains(c.ID))
).ToList();

问题是 queryParameters.CourseIDS.Count() 返回 157,但上面的 lambda 表达式返回 2500 条记录。我究竟做错了什么?

我还确保 ShowInactive 设置为 true,CategoryIDs 为 null,AuthorId 为 0

最佳答案

tl;dr:您忘记了一些括号。

如所写,当 queryParamters.ShowInActive 设置为 true 时,谓词返回 true 并返回所有记录。因此,返回所有记录。您似乎想要使用所有查询参数。为了清楚起见,请尝试向这个复杂的查询中添加一些空格。或者考虑将其拆分为多个 Where() 调用。

courses = courses.Where(
c => (
queryParameters.ShowInActive
||
c.Flags.Contains((ulong)CourseFlags.Active)
) && (
queryParameters.AuthorId <= 0
|| (
c.Authors != null
&&
c.Authors.Exists(a => a.ID == queryParameters.AuthorId)
)
) && (
queryParameters.CategoryIDs == null
||
queryParameters.CategoryIDs.Count == 0
|| (
c.Tags != null
&&
c.Tags.Any(t => queryParameters.CategoryIDs.Contains(t.ID))
)
) && (
queryParameters.CourseIDs == null
||
queryParameters.CourseIDs.Count == 0
||
queryParameters.CourseIDs.Contains(c.ID)
)
)
).ToList();

关于c# - 我的 lambda 表达式没有产生我预期的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18542013/

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