为什么在GroupBy之前我需要ToList

本文关键字:ToList GroupBy 为什么 | 更新日期: 2023-09-27 17:53:30

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

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

删除它

得到一些错误,直到我发现一个样本与列表工作。示例

所以我决定首先创建一个List<dto>,然后执行组by和,解决我的重复问题,如代码所示。

问题是为什么我需要.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得到以下错误

El msamutodo 'First' sólo se puede usar como operación de consulta final。请考虑在实例中使用sugar - el - msamuys来执行'FirstOrDefault'的可能性。

这有点像'First'方法只能用作最后操作,考虑使用'FirstOrDefault'来代替。

但是'FirstOrDefault'在这里也不起作用

为什么在GroupBy之前我需要ToList

我得到一个错误

这不是一个很有用的问题描述。我可以猜到问题:ToList转换查询从LINQ到SQL或EF(你没有说你正在使用什么ORM)到LINQ到对象。您的LINQ提供程序可能不喜欢那个特定的模式并且无法转换它。LINQ to Objects可以执行任何东西,但它只在客户端执行。

应该使用distinct

而不是groupby