2013-10-10 59 views
4

使用組I需要獲得在一個列表中的以下輸出,我使用MVC4和C#。 基本上我需要執行的查詢是:通過並計數lambda表達式

SELECT ESTADO, COUNT(*) 
FROM VISITAS 
WHERE CICLOID=ID 
GROUP BY ESTADO; 

爲了實現這一點,我寫了下面的程序在我的倉庫:

public List<object> PorcentajeVisitasCiclo(Guid id) 
    { 
     return new List<object> {_context.Visitas 
      .Where(a => a.CicloId == id) 
      .GroupBy(a => a.Estado) 
      .Select(n => new { Text = n.Key.Descripcion , Value = n.Count() })}; 
    } 

你能指出我在哪裏,我錯了?它不提供任何編譯錯誤,但是它不返回任何東西

Thankd提前

回答

4

這可能是一個選項。我有同樣的問題,並返回一個對象列表不是解決方案(一些LINQ錯誤,我不記得)。我去了更簡單的解決方案。

public List<DummyModel> Method(int id) 
    { 
     return _context.Visitas.Where(a => a.CicloId == id).GroupBy(a => a.Estado). 
      Select(n => new DummyModel { Name = n.Key.Descripcion, Value = n.Count() }).ToList(); 
    } 
4

您創建一個包含一個元素,這是你的LINQ查詢新List<object>。這可能不是你想要的。

此執行你的LINQ查詢,然後將結果轉換到一個列表:

return _context.Visitas.Where(a => a.CicloId == id) 
    .GroupBy(a => a.Estado) 
    .Select(n => new { Text = n.Key.Descripcion , Value = n.Count() }).ToList(); 

然而,這產生了一個List<yourAnonymousType>不是List<object>亞型的問題。因此,你需要投你的匿名類型第一個對象:

return _context.Visitas.Where(a => a.CicloId == id) 
    .GroupBy(a => a.Estado) 
    .Select(n => new { Text = n.Key.Descripcion , Value = n.Count() }) 
    .Cast<object>().ToList(); 

當然,更好的辦法是放棄匿名類型和使用一個明確的類YourDataTypeTextValue域/屬性。然後,你可以簡單地返回一個List<YourDataType>

+0

謝謝。不過我測試,它要求我將其轉換爲新的返回列表。我做到了,它仍然無法正常工作。也許問題在伯爵? – N8K8

+1

@ user2865100:更新了我的答案。 – Heinzi

1

你可以改變你的返回類型從List<object>IEnumerable

BTW,List<object>等於List

您可以在您的查詢中調用ToList()擴展方法並返回對象列表。但是,這將迫使查詢立即執行,並在將來你不會得到使用yield return。如果您的查詢返回大量數據,這很糟糕。當您致電ToList()時,所有數據將被加載到內存中。

1
return (_context.Visitas.Where(a => a.CicloId == id) 
    .GroupBy(a => a.Estado) 
    .Select(n => new { Text = n.Key , Value = n.Count() })).Cast<object>().ToList();