Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我的lambda表达式不是';I don’我没有产生我所期望的结果 courses=课程。其中( c=>queryParameters.ShowInActive | | c.Flags.Contains((ulong)CourseFlags.Active) && (queryParameters.AuthorId a.ID==queryParameters.AuthorId))) && (queryParameters.CategoryIDs==null | | queryParameters.CategoryIDs.Count==0|| (c.Tags!=null&&c.Tags.Any(t=>queryParameters.categoryId.Contains(t.ID))) && queryParameters.CourseIDs==null | | queryParameters.CourseIDs.Count==0|| 查询参数.CourseIDs.Contains(c.ID)) ).ToList();_C#_Lambda - Fatal编程技术网

C# 我的lambda表达式不是';I don’我没有产生我所期望的结果 courses=课程。其中( c=>queryParameters.ShowInActive | | c.Flags.Contains((ulong)CourseFlags.Active) && (queryParameters.AuthorId a.ID==queryParameters.AuthorId))) && (queryParameters.CategoryIDs==null | | queryParameters.CategoryIDs.Count==0|| (c.Tags!=null&&c.Tags.Any(t=>queryParameters.categoryId.Contains(t.ID))) && queryParameters.CourseIDs==null | | queryParameters.CourseIDs.Count==0|| 查询参数.CourseIDs.Contains(c.ID)) ).ToList();

C# 我的lambda表达式不是';I don’我没有产生我所期望的结果 courses=课程。其中( c=>queryParameters.ShowInActive | | c.Flags.Contains((ulong)CourseFlags.Active) && (queryParameters.AuthorId a.ID==queryParameters.AuthorId))) && (queryParameters.CategoryIDs==null | | queryParameters.CategoryIDs.Count==0|| (c.Tags!=null&&c.Tags.Any(t=>queryParameters.categoryId.Contains(t.ID))) && queryParameters.CourseIDs==null | | queryParameters.CourseIDs.Count==0|| 查询参数.CourseIDs.Contains(c.ID)) ).ToList();,c#,lambda,C#,Lambda,问题是queryParameters.CourseIDS.Count()返回157条记录,但上面的lambda表达式返回2500条记录。我做错了什么 我还确保ShowInactive设置为true,CategoryIDs为null,AuthorId为0tl;博士:你忘了一些括号 如前所述,当queryParameters.ShowInActive设置为true时,谓词返回true,并返回所有记录。因此,将返回所有记录。您似乎想要使用所有查询参数。为了清晰起见,请尝试在这个复杂的查询中添加一些空白

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


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

tl;博士:你忘了一些括号

如前所述,当
queryParameters.ShowInActive
设置为
true
时,谓词返回
true
,并返回所有记录。因此,将返回所有记录。您似乎想要使用所有查询参数。为了清晰起见,请尝试在这个复杂的查询中添加一些空白。或者考虑把它分解成许多<代码>()<代码>调用。< /p>
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();
courses=课程。其中(
c=>(
queryParameters.ShowInActive
||
c、 Flags.Contains((ulong)CourseFlags.Active)
) && (
queryParameters.AuthorId a.ID==queryParameters.AuthorId)
)
) && (
queryParameters.CategoryIDs==null
||
queryParameters.CategoryIDs.Count==0
|| (
c、 标签!=null
&&
c、 Tags.Any(t=>queryParameters.categoryId.Contains(t.ID))
)
) && (
queryParameters.CourseIDs==null
||
queryParameters.CourseIDs.Count==0
||
queryParameters.CourseIDs.Contains(c.ID)
)
)
).ToList();

tl;博士:你忘了一些括号

如前所述,当
queryParameters.ShowInActive
设置为
true
时,谓词返回
true
,并返回所有记录。因此,将返回所有记录。您似乎想要使用所有查询参数。为了清晰起见,请尝试在这个复杂的查询中添加一些空白。或者考虑把它分解成许多<代码>()<代码>调用。< /p>
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();
courses=课程。其中(
c=>(
queryParameters.ShowInActive
||
c、 Flags.Contains((ulong)CourseFlags.Active)
) && (
queryParameters.AuthorId a.ID==queryParameters.AuthorId)
)
) && (
queryParameters.CategoryIDs==null
||
queryParameters.CategoryIDs.Count==0
|| (
c、 标签!=null
&&
c、 Tags.Any(t=>queryParameters.categoryId.Contains(t.ID))
)
) && (
queryParameters.CourseIDs==空
||
queryParameters.CourseIDs.Count==0
||
queryParameters.CourseIDs.Contains(c.ID)
)
)
).ToList();

问题在于运算符优先级,特别是&&的优先级高于| |。因此,不要在这方面花费太多,尝试以下方法:

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();
courses=课程。其中(
c=>(queryParameters.ShowInActive | | c.Flags.Contains((ulong)CourseFlags.Active))
&&
(queryParameters.AuthorId a.ID==queryParameters.AuthorId)))
&&
((queryParameters.CategoryIDs==null | | queryParameters.CategoryIDs.Count==0)||
(c.Tags!=null&&c.Tags.Any(t=>queryParameters.categoryId.Contains(t.ID)))
&&
(queryParameters.CourseIDs==null | | queryParameters.CourseIDs.Count==0||
queryParameters.CourseIDs.Contains(c.ID)))
).ToList();

问题在于运算符优先级,特别是&&的优先级高于| |。因此,不要在这方面花费太多,尝试以下方法:

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();
courses=课程。其中(
c=>(queryParameters.ShowInActive | | c.Flags.Contains((ulong)CourseFlags.Active))
&&
(queryParameters.AuthorId a.ID==queryParameters.AuthorId)))
&&
((queryParameters.CategoryIDs==null | | queryParameters.CategoryIDs.Count==0)||
(c.Tags!=null&&c.Tags.Any(t=>queryParameters.categoryId.Contains(t.ID)))
&&
(queryParameters.CourseIDs==null | | queryParameters.CourseIDs.Count==0||
queryParameters.CourseIDs.Contains(c.ID)))
).ToList();

课程中有多少对象/记录?除了有一个
Id
、一个
标签列表
和一个
作者列表
关于
课程
中的数据,你能告诉我们些什么吗?只需在不使用lambda表达式的情况下重写即可。它不可读。使用lambda表达式的主要原因是为了减少混乱,不必声明具有琐碎实现的委托(例如需要5行才能声明和使用的1行代码)。。。哟