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()