c# – 将Enum.GetName(…)合并到Linq Query中

前端之家收集整理的这篇文章主要介绍了c# – 将Enum.GetName(…)合并到Linq Query中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有枚举:
public enum CmdType {
    [Display(Name = "abc")]
    AbcEnumIdentifier = 0,[Display(Name = "xyz")]
    XyzEnumIdentifier = 1,...
}

我想将每个枚举的名称放入我的查询中,但即使使用.WithTranslations()我也会收到此错误

LINQ to Entities does not recognize the method ‘System.String
GetName(System.Type,System.Object)’ method,and this method cannot be
translated into a store expression.

查询

var joinedRecord =
    (
        from m in mTable
        join b in bTable on m.Id equals b.aRefId
        select new {
            aId = a.Id,aAttrib1 = a.Attrib1
            ...
            bCmdType = Enum.GetName(typeof(CmdType),b.CmdType)
        }
    ).WithTranslations();

如何在查询中使用Enum.GetName(…)返回生成的值?

解决方法

您正在调用无法转换为sql的Enum.GetName(typeof(CmdType),b.CmdType),因为如果您查看行,您将看到有一个int而不是有问题的枚举值名称.

试试这个:

var joinedRecord =
(
    from m in mTable
    join b in bTable on m.Id equals b.aRefId
    select new {
        aId = a.Id,aAttrib1 = a.Attrib1
        ...
        bCmdType = b.CmdType
    }
)
.AsEnumerable() // or ToList()
.Select( // map to another type calling Enum.GetName(typeof(CmdType),b.CmdType) )
.WithTranslations();

这样做是通过调用AsEnumerable()或ToList(),您不再处理IQueryable< T>的实例. (这是你的原始查询返回的,坏的一面一旦你这样做,所有返回的对象将在内存中).因此,一旦在内存中有对象,就可以像使用任何其他C#对象一样使用它们,这些对象应该允许您使用所需的方法.

猜你在找的C#相关文章