实体、包含或交叉,这个查询可能吗?

15 浏览
0 Comments

实体、包含或交叉,这个查询可能吗?

我有一个以这种方式检索到的字符串列表:

List keyWords = db.MotCleRecherche.Select(t => t.MotClé).ToList();

我还有一个需要执行许多参数的查询:

object = db.DAapp.Where(t => t.CODE_ART.StartsWith(s) && t.DATE_CREAT >= debut && t.DATE_CREAT < fin).ToList()

现在...我想添加这样的条件:

  db.DAapp.Where(t => t.DESC_ART.ToLower().Contains(keywords.ToLower()))

或者

  db.DAapp.Where(t => t.DESC_ART.ToLower().Intersect(keywords.ToLower()))

我猜你可能看到了...我无法想象如何真正使这个工作...我只知道考虑一个填充了X的列表和填充了Y的列表:

X.Intersect(Y).Any()

如果有相等的东西,将返回true...但是DESC_ART只是一个长字符串,我想知道是否有一些关键词在其中。

0
0 Comments

在上述内容中,问题的出现是因为需要在比较之前将关键字转换为小写。解决方法是使用LINQ查询,并在每次迭代中调用ToLower()方法来比较字符串。但是,这种方法在每次迭代中都会调用ToLower()方法,因此效率较低。

这种解决方法是否适用于与数据库的交互,有人提出了疑问。根据一些来自Stack Overflow的答案,人们认为这种方法在与数据库交互时可能不会按预期工作。但是,也有可能在过去的五年中有所更改。

然后,某些情况下了另一种解决方法,即通过获取对数据库的管理员访问权限并编辑表格来解决问题。这个解决方法可能并不实际,因为它需要特殊的权限和访问控制。

问题的出现是因为需要将关键字转换为小写进行比较,解决方法是使用LINQ查询,并在每次迭代中调用ToLower()方法来比较字符串。然而,这种方法可能在与数据库的交互中不起作用。另一个提到的解决方法是通过获取管理员访问权限并编辑表格来解决问题,但这种方法可能并不实际。

0
0 Comments

这段代码提供了一个用于构建包含多个WHERE表达式的OR查询的方法。这个方法被称为`AnyOf`,它接受一个`Expression>`类型的数组作为参数,并返回一个代表包含所有条件的Lambda表达式。

在代码中,还提供了一个名为`SwapVisitor`的辅助类,用于交换表达式中的参数,以便在构建OR表达式时使用相同的参数。

为了演示如何使用`AnyOf`方法,代码中提供了一个示例。首先,创建了一个`List>>`类型的变量`filters`,用于存储多个查询条件。然后,通过循环遍历关键字列表`keyWords`,为每个关键字创建一个表达式,该表达式用于判断`d.DESC_ART`是否包含关键字。接下来,将所有条件传递给`AnyOf`方法,得到一个代表所有条件的Lambda表达式`lambda`。

在查询语句中,首先创建一个基本查询`q`,包含了一些基本的条件,如`t.CODE_ART.StartsWith(s)`和日期范围条件。然后,使用`q.Where(lambda)`方法将`lambda`表达式添加到查询中,以实现OR条件的逻辑。最后,调用`q.ToList()`执行查询,并将结果存储在`res`变量中。

需要注意的是,这种方法只生成一个SELECT查询,其中包含了多个WHERE表达式。相比于在WHERE子句中包含多个SELECT查询的其他解决方案,这种方法更高效。

这段代码提供了一个用于构建包含多个WHERE表达式的OR查询的方法,以及一个示例演示了如何使用该方法。通过使用`AnyOf`方法,可以更高效地构建包含多个条件的查询。

0