2015-04-03 17 views
6

böyle temsil edilebilir mevcudiyetlere bir listesi vardır:Bir varlıklar listesini özel siparişle nasıl sipariş edebilirsiniz?

Type | Property A | Property B | ... 
-------------------------------------- 
A | ABC  | 123  | ... 
A | ABC  | 123  | ... 
D | ABC  | 123  | ... 
D | ABC  | 123  | ... 
B | ABC  | 123  | ... 
C | ABC  | 123  | ... 

Tip bir dize ve sadece 4 farklı değerlerin bir olabilir (örneğin, A, B, C, D). Bu varlıkları Tip no'lu sipariş vermem gerekiyor, ancak özel bir siparişle (örn. A, D, B, C).

böyle bir şey denedim:

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

Ama aşağıdaki hatayı alıyorum: varlıkları için

LINQ yöntemi 'Int32 Get_Item (System.String)' yöntemini ve bu tanımıyor yöntem bir mağaza ifadesine çevrilemez.

Bu hatayı anlamıyorum ve bu OrderBy ile ne yapacağınızı bilmiyorum. Bu varlıkların özel siparişle Tip tarafından nasıl sipariş verileceğini lütfen söyler misiniz? LINQ TO SQL SQL eşdeğer faaliyete Sözlük Int32 get_Item(System.String) çeviremiyor çünkü

+0

bu EntityFramework bazı SQL üzerinde teh Sözlük göndermek gerekir, çünkü çalışmıyor nedeni:


A çözmek için çok basit bir şekilde AsEnumerable() tarafından bellekte varlıkları getirmektir etkili bir şekilde yapamadığı yol. – jessehouwing

+0

EntityFramework'a, sözlüğünüzü yüklemelere dayalı bir işleve nasıl çevireceğinizi bildirerek bunu başarabilirsiniz. http://stackoverflow.com/a/16839341/736079 – jessehouwing

cevap

4

I don't understand this error

öyle.

return db.MyEntity.AsEnumerable(). 
     .OrderBy(x => orderType[x.Type]) 
     .ToList(); 
+1

Gerçekten de mükemmel çalışıyor. Açıklama için teşekkür ederim. – Alex

+0

Bellekte getirmemenin bir yolu var mı? –