我正在努力解决同样的问题。我发现了两个可以帮助你但有一个缺点的选项。
不要使用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 LIKE
and is case insensitive进行的。有关此差异的更多信息,请点击此处。
我使用的 LINQ 查询方法不是删除项目,而是Take(0)
在整个查询中添加一个(你必须用括号括起来)。这会产生最简单的 SQL Server 执行计划。