如何通过自定义订单订购实体列表?

Ale*_*lex 7 c# linq linq-to-entities

我有一个可以像这样表示的实体列表:

Type | Property A | Property B | ... 
--------------------------------------
A    | ABC        | 123        | ...
A    | ABC        | 123        | ...
D    | ABC        | 123        | ...
D    | ABC        | 123        | ...
B    | ABC        | 123        | ...
C    | ABC        | 123        | ...
Run Code Online (Sandbox Code Playgroud)

Type是一个字符串,只能是4个不同值中的一个(例如A,B,C,D)我需要按类型对这些实体进行排序,但需要使用自定义顺序(例如A,D,B,C).

我试过这样的事情:

var orderType = new Dictionary<string, int>() {
                    { "A", 0 },
                    { "D", 1 },
                    { "B", 2 },
                    { "C", 3 }
                };
return db.MyEntity
         .OrderBy(x => orderType[x.Type])
         .ToList();
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

LINQ to Entities无法识别方法'Int32 get_Item(System.String)'方法,并且此方法无法转换为存储表达式.

我不明白这个错误,也不知道如何处理这个OrderBy.您能否告诉我如何通过自定义订单键入这些实体?

Per*_*t28 5

我不明白这个错误

这是因为LINQ TO SQL无法将Int32 get_Item(System.String)Dictionary转换为SQL中的等效操作。


解决此问题的一种非常简单的方法是通过以下方式将实体带入内存AsEnumerable()

return db.MyEntity.AsEnumerable().
         .OrderBy(x => orderType[x.Type])
         .ToList();
Run Code Online (Sandbox Code Playgroud)

  • 有什么解决方案不将其带入内存吗? (3认同)