c#linq,在.Get()上使用.where()会有什么影响?

时间:2016-06-03 16:33:01

标签: c# linq

我们办公室的一个问题是:

之间有什么区别

方法1

var team = _db.Get<ClientCreateDefaults>(c => c.ClientRef == newCase.ClientRef &&
    c.WorkTypeCode == newCase.WorkTypeCode);

方法2

var team = _db.Get<ClientCreateDefaults>(c => c.ClientRef ==
    newCase.ClientRef).Where(w => w.WorkTypeCode == newCase.WorkTypeCode);

方法3

var team = _db.Get<ClientCreateDefaults>().Where(w => w.WorkTypeCode ==
    newCase.WorkTypeCode).Where(c => c.ClientRef == newCase.ClientRef);

给出了答案:

  

如果这是我们的DataContext

     

第一个,条件将全部转换为SQL,因此过滤将在db服务器上进行。

     

第二个只在数据库服务器上执行第一个,然后在客户端按WorkTypeCode进行过滤。

     

第三个将过滤所有客户端并从db获取所有项目。

这是对的吗? linq真的会将整个数据集带到客户端吗?

1 个答案:

答案 0 :(得分:2)

Get是您的代码,而不是LINQ 2 SQL的代码。根据专家的解释,它返回IEnumerable。一旦它返回,你离开LINQ 2 SQL的领域并输入LINQ to Objects。这就是为什么在客户端上完成附加过滤的原因。

这看起来像是一个通用的存储库模式。