ef core-使用ef.functions.like选择所有列

ds97pgxw  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(558)

我正在使用efcore3.1.4(表名模糊化)在sqlserver数据库上搜索一个大视图。

var query = searchModel.SearchQuery.ToUpper();

list = list.Where(s => EF.Functions.Like(s.name0.ToUpper(), $"%{query}%")
                || EF.Functions.Like(s.name1.ToUpper(), $"%{query}%")
                || EF.Functions.Like(s.name2.ToUpper(), $"%{query}%")
                || EF.Functions.Like(s.name3.ToUpper(), $"%{query}%")
                || EF.Functions.Like(s.name4.ToUpper(), $"%{query}%")
                || EF.Functions.Like(s.name5.ToUpper(), $"%{query}%")
                || EF.Functions.Like(s.name6.ToUpper(), $"%{query}%")
                || EF.Functions.Like(s.name7.ToUpper(), $"%{query}%")
                || EF.Functions.Like(s.name8.ToUpper(), $"%{query}%")
                || EF.Functions.Like(s.name9.ToUpper(), $"%{query}%")
                || EF.Functions.Like(s.name10.ToUpper(), $"%{query}%"));

有没有办法只选择所有列而不在列中添加or运算符 Where 每列的条件?

kpbwa7wx

kpbwa7wx1#

您可以使用这个答案作为起点,通过实体框架来读取数据库的模式。一旦有了列名列表,就可以编写静态或扩展方法 IsLikeAColumn ,用于 Where(s => IsLikeAColumn(s)) ,看起来像:

bool match = false;
foreach (string columnName in columnNames)
{
    match |= EF.Functions.Like(columnName, $"%{query}%");
}
return match;
5us2dqdw

5us2dqdw2#

不,这根本不可能,即使在SQLServer中也不可能。即使在c# If 以及 While 你也不能这样做。应该有多个带有比较运算符的条件

相关问题