我正在尝试连接多个LINQ请求返回(所有返回都是IQueryable)。
我的问题是我需要从一个空的IQueryable变量开始,但是“。Invcat”方法不适用于“Nothing”的变量。
我想知道你是否有办法做到这一点?
PS:您可以将多个“Where”请求用作“AND”但不能用作“OR”(Seq.Where(Seq.Where()))。我试图通过连接多个请求来做后者。此外,如果我做了一个不可能的请求(请求返回不匹配),它可以工作,但这显然不是一个好主意。
无论如何,谢谢你。祝你有愉快的一天。
答案 0 :(得分:1)
最后,我必须在列表的第一项上执行一次请求,然后删除该项。之后,我可以简单地为每个做一个(使用“Contains”来查询我的数据库)。
不过,我认为这不是一个真正的答案。它几乎就像一个黑客。
我找不到使用linq查询的方法。
我使用Contains
查询我的数据库并验证x是否在数据库中。但我不得不为此获取x列表。
答案 1 :(得分:0)
尝试:
var start=(new List<something>()).AsQueryable();
虽然这可能仅在您的IQueryable在同一个源(在本例中为对象)时才有效。我建议尝试找出一种LINQ方式来做你的&#34; OR&#34;正确地,通过Aggregate
,Intersects
,Contains
,Any
或PredicateBuilder
。
答案 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最简单的执行计划。