LINQ 搜索查询不起作用



我正在尝试用 LINQ 编写搜索查询。下面是 where 条件。

where (!string.IsNullOrEmpty(nameWithInitials) 
 && tb.NameWithInitials.Contains(nameWithInitials)) 
 && (!string.IsNullOrEmpty(studentRegNo) 
    && tbSR.StudentRegistrationNo.Contains(studentRegNo))
 && (!string.IsNullOrEmpty(NIC) && tb.NIC.Contains(NIC)) 
 && (!string.IsNullOrEmpty(fullName) && tbi.Name.Contains(fullName))

如果我传递单个参数,它不会返回任何值。例如,如果我传递"Chamara"作为全名,它不会返回任何结果,但如果我一次传递所有参数,那么它会返回匹配的记录。

即使我动态传递多个参数,我也需要让它工作

你在任何地方都使用 AND(&&),所以如果这些条件中至少有一个是假的,你的where条件将是假的。请尝试改用 OR 条件:

where (string.IsNullOrEmpty(nameWithInitials) || tb.NameWithInitials.Contains(nameWithInitials)) 
 && (string.IsNullOrEmpty(studentRegNo) || tbSR.StudentRegistrationNo.Contains(studentRegNo))
 && (string.IsNullOrEmpty(NIC) || tb.NIC.Contains(NIC)) 
 && (string.IsNullOrEmpty(fullName) || tbi.Name.Contains(fullName))

在这种情况下,在任何这些条件下,如果您有空参数,则只会计算条件的第一部分,否则将评估第二个条件。

一个潜在的问题是实体框架可能无法将其转换为实际的 SQL。在这种情况下,您可以使用以下方法:

var query = // your original query without where condition
// Check if the condition is valid and only then add where condition
if(!string.IsNullOrEmpty(nameWithInitials))
{
    query = query.Where(tb => tb.NameWithInitials.Contains(nameWithInitials));
}
// repeat this for all other conditions

你问的是半混乱的,但我认为你想搜索每个字符串(如果存在),这转化为

where ((string.IsNullOrEmpty(nameWithInitials) 
 || tb.NameWithInitials.Contains(nameWithInitials)) 
 && (string.IsNullOrEmpty(studentRegNo) 
    || tbSR.StudentRegistrationNo.Contains(studentRegNo))
 && (string.IsNullOrEmpty(NIC) || tb.NIC.Contains(NIC)) 
 && (string.IsNullOrEmpty(fullName) || tbi.Name.Contains(fullName))

相关内容

  • 没有找到相关文章

最新更新