【发布时间】:2015-08-19 09:46:48
【问题描述】:
我正在创建我的 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 得到以下错误
El método 'First' sólo se puede usar como operación de consulta final。考虑一下 la posibilidad de utilizar en su lugar el método 'FirstOrDefault' en esta instancia。
这类似于“First”方法只能用作最终操作,请考虑改用“FirstOrDefault”。
但“FirstOrDefault”在这里也不起作用
【问题讨论】:
-
您是否尝试将Enumerable 隐式转换为列表?
-
是什么让你觉得你需要它?你当然不需要
OrderBy,因为你已经在使用GroupBy。此外,您正在寻找Distinct方法。 -
不。 IEnumerable 也有 .GroupBy()。如您所见,最后一行也是一个 .ToList()
标签: c# asp.net-mvc linq