我有枚举:
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();
解决方法
您正在调用无法转换为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#对象一样使用它们,这些对象应该允许您使用所需的方法.