2015-06-04 80 views
0

我正在創建我的api來從任何城市返回cod_postal來製作一些鏈接的下拉組合。爲什麼我需要在GroupBy之前ToList

我在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得到了以下錯誤

薩爾瓦多方法方法「第一」獨唱SE puede城市搜救科莫operación德CONSULTA決賽。考慮到「先發制人」或「先發制人」的慣例。

這就像'First'方法只能用作最終操作,請考慮使用'FirstOrDefault'。

但 'FirstOrDefault' 不在這裏工作既

+0

你是不是想的這一翻譯隱式蒙上了[可枚舉(https://msdn.microsoft.com/en-us/library/system.linq.enumerable%28v= vs.100%29.aspx)到一個列表? – lloyd

+0

是什麼讓你覺得你需要它?由於您已經在使用'GroupBy',所以您當然不需要'OrderBy'。此外,您正在尋找['Distinct'](https://msdn.microsoft.com/en-us/library/vstudio/bb348436.aspx)方法。 –

+0

沒有。 IEnumerable也有.GroupBy()。正如你所看到的最後一行也是.ToList() –

回答

4

我得到一個錯誤

這不是一個非常有用的問題說明。我可以猜到這個問題:ToList將LINQ查詢從LINQ轉換到SQL或EF(你沒有說你使用的是什麼ORM)到LINQ to Objects。你的LINQ提供者可能不喜歡那種特殊模式,也不能翻譯它。 LINQ to Objects可以執行任何操作,但它可以在客戶端上執行任何操作。

+0

對不起,我包含錯誤描述 –

+0

好的,那個錯誤證實了我的猜測。 – usr

+0

是的,我使用EF。所以當我做第一個'.ToList'時,我將我的db數據移動到LINQ to Object而不是LINQ to Provider?那人可以正確處理grp.First()嗎? (希望我得到了代理權) –

0

使用GROUPBY你應該使用不同的

+0

有兩個屬性 cod_postal_id(唯一值)和名稱(posible duplicate)我如何使Distinct帶來第一對重複? –

相關問題