从VB中的Empty IQueryable开始连接IQueryable

时间:2015-05-14 21:43:49

标签: vb.net linq concat iqueryable nothing

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

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

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

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

无论如何,谢谢你。祝你有愉快的一天。

3 个答案:

答案 0 :(得分:1)

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

不过,我认为这不是一个真正的答案。它几乎就像一个黑客。

我找不到使用linq查询的方法。

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

答案 1 :(得分:0)

尝试:

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

虽然这可能仅在您的IQueryable在同一个源(在本例中为对象)时才有效。我建议尝试找出一种LINQ方式来做你的&#34; OR&#34;正确地,通过AggregateIntersectsContainsAnyPredicateBuilder

答案 2 :(得分: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查询结果(与您一样),比较似乎在数据库中使用LIKE进行,并且不区分大小写。有关此差异的更多信息here

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