在sql而不是内存中进行IEnumerable过滤?

时间:2017-03-29 17:37:52

标签: c#

我看到很多帖子都在讨论IEnumerable它在内存中应用过滤而不是像IQueryable这样的SQL服务器。

但是,

我的20 records表格中有only one has Id = '12345'

当我做的时候

IEnumerable<Customer> customer = _context.Customer.where(x => x.Id== '12345');

返回1行和not of 20行。 为什么呢?

我的理解是它最初会返回20行,后来当我做

var result = customers.ToList(); 

它将返回1条记录。

1 个答案:

答案 0 :(得分:0)

此时,您在IQueryable界面上执行where。 (请记住,=的右侧先执行,然后执行左侧)

IEnumerable<Customer> customer = _context.Customer.Where(x => x.Id == 12345);

你所读到的是这样的:

IEnumerable<Customer> customers = _context.Customer
IEnumerable<Customer> clientFiltered = customers.Where(x => x.Id == 12345);

如果你想这样做oneliner:

_context.Customer.AsEnumerable().Where(x => x.Id == 12345);

注意,在后两种情况下,您首先将其投放到IEnumerable,然后执行更具体的Where