当我将 var 更改为 IEnumerable 时,我的搜索结果会区分大小写;考虑以下代码:
下面的代码返回 RA 或 ra 两种情况:
var result = from x in dataBase.tableName
select x;
result = result.Where(x => x.id.Contains("ra"));
下面的代码只返回带有 ra 而不是 RA 的情况:
IEnumerable result = from x in dataBase.tableName
select x;
result = result.Where(x => x.id.Contains("ra"));
有人可以帮我解释一下这是怎么回事吗?结果不应该相似吗?
最佳答案
区别在于,在第一种情况下,var
将是 IQueryable<T>
- 这意味着你的 Where
电话将拨至 Queryable.Where
(在将 lambda 表达式转换为表达式树之后)。过滤器最终在数据库中执行,我怀疑您的字段不区分大小写(因此搜索不区分大小写)。
在第二种情况下,你有一个 IEnumerable<T>
, 所以你的 Where
电话将拨至 Enumerable.Where
(在将您的 lambda 表达式转换为委托(delegate)之后)。过滤器最终在 .NET 代码中执行 - 其中 Contains
始终区分大小写。
基本上,LINQ 是一个有漏洞的抽象 - 是的,如果同一个过滤器在所有情况下都给出相同的结果,那就太好了,但这是不现实的。了解泄漏的位置,并采取相应的行动 - LINQ 仍然是一个巨大的福音:)
关于c# - 通过将 var 更改为 IEnumerable 来获得不同的搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7055512/