2

我正在尝试连接多个 LINQ 请求返回(所有返回都是 IQueryable)。

我的问题是我需要从一个 Empty IQueryable 变量开始,但“.Concat”方法不适用于“Nothing”变量。

我想知道你有没有办法做到这一点?

PS:您可以将多个“Where”请求用作“AND”但不能用作“OR”(Seq.Where(Seq.Where()))。我试图通过连接多个请求来完成后者。另外,如果我做了一个不可能的请求(一个返回不匹配的请求),它可以工作,但这显然不是一个好主意。

还是非常感谢。祝你今天过得愉快。

4

3 回答 3

1

最后我不得不在列表的第一项上做一次我的请求,然后删除该项目。之后,我可以简单地为每个做一个(使用“包含”来查询我的数据库)。

不过,我认为这并不是一个真正的答案。它看起来很像一个黑客。

我没有找到使用 linq 进行查询的方法。

Contains我正在使用并验证 x 是否在数据库中来查询我的数据库。但我不得不为此获取 x 列表。

于 2015-05-15T23:53:01.693 回答
0

尝试:

var start=(new List<something>()).AsQueryable();

尽管这可能仅在您的 IQueryable 位于同一源(在本例中为对象)上时才有效。Aggregate我建议尝试通过, Intersects,或 找出正确执行“或”的 LINQContains方法。AnyPredicateBuilder

于 2015-05-14T22:23:02.827 回答
0

我正在努力解决同样的问题。我发现了两个可以帮助你但有一个缺点的选项。

不要使用AsQueryable()(在其他帖子中建议),试试这些(对不起,只是 C# 代码,但我想它可能还是有用的)

var query = new List<ServiceTicketCombinedHistory>().Take(0);
var query = Enumerable.Empty<ServiceTicketCombinedHistory>();
// Optionally:
var query = Enumerable.Empty<ServiceTicketCombinedHistory>().Take(0);

我的问题是我的查询有一个Where(x => x.Field.Contains(value)), 并且使用这些选项,这种比较似乎是在内存上完成的并且区分大小写。通过使用空的 LINQ 查询结果(就像您所做的那样),比较似乎是在数据库中使用 a LIKEand is case insensitive进行的。有关此差异的更多信息,请点击此处

我使用的 LINQ 查询方法不是删除项目,而是Take(0)在整个查询中添加一个(你必须用括号括起来)。这会产生最简单的 SQL Server 执行计划。

于 2016-03-23T19:58:52.170 回答