C# 如果参数存在,则返回带有位置和条件的foreach

C# 如果参数存在,则返回带有位置和条件的foreach,c#,linq,foreach,C#,Linq,Foreach,我有一个大的查询,我试图使用Where条件和参数StudentName和studentlasname获取数据,这是用户通过搜索表单设置的 如果StudentName和Student姓氏有值,那么一切都很好,但是如果其中一个没有值,那么我什么也得不到 问题是,在这种情况下,我希望这个foreach循环无论如何都能在没有null参数的情况下获取数据 foreach (var item in innerJoinQuery.Where(item => item.StudentName == Stu

我有一个大的查询,我试图使用Where条件和参数StudentName和studentlasname获取数据,这是用户通过搜索表单设置的

如果StudentName和Student姓氏有值,那么一切都很好,但是如果其中一个没有值,那么我什么也得不到

问题是,在这种情况下,我希望这个foreach循环无论如何都能在没有null参数的情况下获取数据

foreach (var item in innerJoinQuery.Where(item => item.StudentName == StudentName 
                                               && item.StudentSurname  == StudentSurname)

如果其中一个搜索参数为null或空,则可以设置一个或条件,以允许项通过。比如:

innerJoinQuery.Where(item => 
    (string.IsNullOrWhiteSpace(StudentName) || item.StudentName == StudentName) 
    && 
    (string.IsNullOrWhiteSpace(StudentSurname) || item.StudentSurname  == StudentSurname)
)

您的意思是没有提供输入值,即StudentName为null,还是数据不存在,即item.StudentName为null?是的。当您点击搜索但不填写StudentName或StudentNames的搜索框时。然后您需要从数据库返回所有数据?在这种情况下,您只需按如下方式进行验证:string.IsNullOrEmptyStudentName返回布尔值是,我仍要返回数据。如果其中一个变量为null,那么foreach什么也不给出。但是我想让它返回至少所有数据,使用第二个选项。我发现这个解决方案比Nisargs解决方案更干净,更容易阅读,即使它们本质上是相同的。你可以将每个或条件放在分隔的Where函数中,可读性会更高
if (!string.IsNullOrEmpty(StudentName))
    innerJoinQuery = innerJoinQuery.Where(item => item.StudentName == StudentName);

if (!string.IsNullOrEmpty(StudentSurname))
    innerJoinQuery = innerJoinQuery.Where(item => item.StudentSurname == StudentSurname);

foreach (var item in innerJoinQuery)
...