ToList()查询之前的代码差异

时间:2014-04-16 13:25:08

标签: c# performance entity-framework comparison standards

这些方法有什么区别

public List<CollegeAddress> GetAllAddress()
{
    return collegeAppContext.CollegeAddresses.ToList().Where(x => x.StateId == 4);
}

public List<CollegeAddress> GetAllAddress()
{
    return collegeAppContext.CollegeAddresses.Where(x => x.StateId == 4).ToList();
}  

哪一种方法是标准代码? (但我的第一种方法引发了对话错误:)

有什么区别?

2 个答案:

答案 0 :(得分:5)

在您的第一个示例中,您将从数据库中带来所有CollegeAddresses,然后进行过滤。

您的第二个示例在您的查询中添加了where子句,因此在它涉及您的方法之前已经过滤了。

编辑: 至于第一种方法中的错误,因为Where返回IQueryable而不是List。所以,你必须添加ToList();但是你应该仍然使用第二种方法。

答案 1 :(得分:0)

不同之处在于第一个示例将返回一个IQueryable,它将在查询时进行评估,第二个示例将返回一个已评估的List

我可以建议改变方法签名:

public List<CollegeAddress> GetAddressesByState(int stateId)
{
    return collegeAppContext.CollegeAddresses.Where(x => x.StateId == stateId).ToList();
}