您发布的代码至少有 3 个错误,所以我认为这不是您的实际代码。要获得您描述的症状,最可能的原因是您在某处使用过,并且正在从IEnumerable<T>
该处进行创作。要获得端到端查询组合(即在数据库中执行),您需要使用. 例如,以下内容已损坏:TOP
IQueryable<T>
IEnumerable<SomeType> data = db.SomeTable;
var c = (from l in data
where l.Name == "test"
select l).Take(10);
但以下内容绝对没问题,请注意只有第一行发生了变化:
IQueryable<SomeType> data = db.SomeTable;
var c = (from l in data
where l.Name == "test"
select l).Take(10);
注意到这也等同于:
IQueryable<SomeType> data = db.SomeTable;
var c = data.Where(l => l.Name == "test").Take(10);
所以:确保你没有IEnumerable<T>
过早地强迫它(或类似的,如列表)。
最后一点,如果您正在应用跳过/获取,IIRC 实体框架要求订购(如果您不应用则会出错) - 这进一步支持了我的猜测,即您已经IEnumerable<T>
过早地下降,但是:如果您需要,请不要感到惊讶也指定一个order by
。