C# ToList()查询前的代码差异
这两种方法的区别是什么C# ToList()查询前的代码差异,c#,performance,entity-framework,comparison,standards,C#,Performance,Entity Framework,Comparison,Standards,这两种方法的区别是什么 public List<CollegeAddress> GetAllAddress() { return collegeAppContext.CollegeAddresses.ToList().Where(x => x.StateId == 4); } public List GetAllAddress() { 返回collegeAppContext.CollegeAddresses.ToList(),其中(x=>x.StateId==4);
public List<CollegeAddress> GetAllAddress()
{
return collegeAppContext.CollegeAddresses.ToList().Where(x => x.StateId == 4);
}
public List GetAllAddress()
{
返回collegeAppContext.CollegeAddresses.ToList(),其中(x=>x.StateId==4);
}
及
public List GetAllAddress()
{
返回collegeAppContext.CollegeAddresses.Where(x=>x.StateId==4.ToList();
}
哪一种方法是标准代码?(但我的第一个方法引发了对话错误:)
有什么区别 在第一个示例中,您将从数据库中获取所有CollegeAddress,然后进行筛选 第二个示例向查询中添加了一个
where
子句,因此在使用方法之前对其进行过滤
编辑:
至于第一种方法中的错误,这是因为
Where
返回的是IQueryable
,而不是列表。因此,您必须添加ToList()代码>您仍然应该使用第二种方法。在第一个示例中,您将从数据库中获取所有CollegeAddress,然后进行筛选
第二个示例向查询中添加了一个where
子句,因此在使用方法之前对其进行过滤
编辑:
至于第一种方法中的错误,这是因为Where
返回的是IQueryable
,而不是列表。因此,您必须添加ToList()代码>您仍然应该使用第二种方法。不同之处在于,第一个示例将返回一个IQueryable,查询时将对其进行计算,而第二个示例将返回一个已计算的列表
我是否可以建议更改方法签名:
public List<CollegeAddress> GetAddressesByState(int stateId)
{
return collegeAppContext.CollegeAddresses.Where(x => x.StateId == stateId).ToList();
}
public List GetAddressesByState(int stateId)
{
返回collegeAppContext.CollegeAddresses.Where(x=>x.StateId==StateId.ToList();
}
不同之处在于,第一个示例将返回一个IQueryable,查询时将对其进行计算,第二个示例将返回一个已计算的列表
我是否可以建议更改方法签名:
public List<CollegeAddress> GetAddressesByState(int stateId)
{
return collegeAppContext.CollegeAddresses.Where(x => x.StateId == stateId).ToList();
}
public List GetAddressesByState(int stateId)
{
返回collegeAppContext.CollegeAddresses.Where(x=>x.StateId==StateId.ToList();
}
第二个是正确的。首先检索集合,过滤它,然后强制转换它(在您的示例cast to list中)。请发布第一个集合的确切错误消息。它们应该提供完全相同的结果,不同之处在于过滤的位置。问题是下面描述的@Bill-ToList()。where()将返回IQueryable,而不是预期的列表。第二个是正确的。首先检索集合,过滤它,然后强制转换它(在您的示例cast to list中)。请发布第一个集合的确切错误消息。它们应该提供完全相同的结果,不同之处在于过滤的位置。问题是如下所述的@Bill-ToList()。where()将返回IQueryable,而不是预期的列表。Doh,抱歉。这是因为Where
返回的是IQueryable
,而不是列表。因此,您必须添加ToList()代码>但是,您仍然应该使用第二种方法。Doh,抱歉。这是因为Where
返回的是IQueryable
,而不是列表。因此,您必须添加ToList()但是,您仍然应该使用第二种方法。