为什么我需要在GroupBy之前使用ToList

时间:2015-06-04 16:46:39

标签: c# asp.net-mvc linq

我正在创建我的api以从任何城市返回cod_postal来制作一些链接的下拉组合。

我在db中意识到一些cod_postal是重复的。所以我尝试使用GroupBy

删除它

在我找到使用列表的示例之前出现了一些错误。 Sample

所以我决定首先创建一个List<dto>然后执行分组,并在代码显示时解决我的重复问题。

问题是为什么我需要.ToList()加入DTO和GroupBy步骤?

public class cod_postalDTO
{
    public int cod_postal_id { get; set; }
    public string name { get; set; }
}
public class codPostalController : ApiController
{
    private dbEntities db = new dbEntities ();

    public List<cod_postalDTO> Getcod_postal(int city_id)
    {

        List<cod_postalDTO> l_cod_postal = db.cod_postal
                                            .Where(c => c.city_id == city_id)
                                            .Select(c => new cod_postalDTO
                                            {
                                                cod_postal_id = c.cod_postal_id,
                                                name = c.name
                                            })
                                            .OrderBy(o => o.name)
                                            .ToList() // <== why i need this line?
                                            .GroupBy(c => c.name)
                                            .Select(grp => grp.First())
                                            .ToList();

        return l_cod_postal;
    }

如果我不包括中间.ToList收到以下错误

  Elpétodo'First'ssólosepuede usarcomoperaracióndeconsulta final。考虑到la posibilidad de utilizar en su lugarelmétodo'FirstOrDefault'enesta instancia。

     

这就像'First'方法只能用作最终操作,考虑使用'FirstOrDefault'代替。

但'FirstOrDefault'在这里既不起作用

2 个答案:

答案 0 :(得分:4)

  

我收到错误

这不是一个非常有用的问题描述。我可以猜到这个问题:ToList将查询从LINQ转换为SQL或EF(你没有说过你正在使用的ORM)到LINQ to Objects。您的LINQ提供程序可能不喜欢该特定模式,无法翻译它。 LINQ to Objects可以在客户端上执行任何操作。

答案 1 :(得分:0)

使用groupby的Intead你应该使用不同的