2011-07-27 86 views
1

我有以下GROUP語句生成我正在尋找的結果。在LINQ結果中包含ENUM描述

但是,我想將下面的第4行更改爲「通過s.ComplaintNatureTypeId.ToDescription()分組s」,以便根據ENUM描述而不是數字鍵值對結果進行分組。

如果我改變了行,我得到錯誤「Method.System.String ToDescription(System.Enum)'沒有支持的SQL轉換。」

注意:ToDescription()是Enum擴展方法,用於從枚舉中獲取描述。

 var qry = from s in _db.Complaints 
        where s.Site.SiteDescription.Contains(searchTextSite) 
        && (s.Raised >= startDate && s.Raised <= endDate) 
        group s by s.ComplaintNatureTypeId.ToString() 
         into grp 
         select new 
         { 
          Site = grp.Key, 
          Count = grp.Count() 
         }; 

     return Json(qry.ToList(), JsonRequestBehavior.AllowGet); 

枚舉類:

using System.ComponentModel; 

namespace Emas.Model.Enumerations 
{ 
    public enum ComplaintNatureType 
    { 
     [Description("- Please Select -")] 
     Blank = 0, 

     [Description("Letter")] 
     LE = 1, 

     [Description("eMail")] 
     EM = 2, 

     [Description("Verbal")] 
     VE = 3, 

     [Description("Other [see comments]")] 
     OT = 4, 

    } 
} 

回答

2

你必須做.ToDescription()在內存中。

var qry = (from s in _db.Complaints 
        where s.Site.SiteDescription.Contains(searchTextSite) 
        && (s.Raised >= startDate && s.Raised <= endDate) 
        group s by s.ComplaintNatureTypeId 
         into grp 
         select new 
         { 
          Site = grp.Key, 
          Count = grp.Count() 
         }) 
      .ToList() 
      .Select(g => new 
         { 
          Site = g.Site.ToDescription(), 
          g.Count 
         }); 

return Json(qry, JsonRequestBehavior.AllowGet); 
+0

非常感謝! – John