在LINQ结果中包含ENUM描述

时间:2011-07-27 03:22:30

标签: asp.net-mvc

我有以下GROUP语句产生我正在寻找的结果。

但是,我想将下面的第4行更改为“group by s.ComplaintNatureTypeId.ToDescription()”,以便结果按ENUM描述而不是数字键值进行分组。

如果我更改了行,我会收到错误“Method'System.String ToDescription(System.Enum)'没有支持的SQL转换。”

注意: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.ToString()
                      into grp
                      select new
                      {
                          Site = grp.Key,
                          Count = grp.Count()
                      };

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

ENUM课程:

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,

    }
}

1 个答案:

答案 0 :(得分: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);