2015-12-24 25 views
7

Ben lambda varlık framework dinamik sıralamak istiyorum. Ben daha fazla zaman kurdu, ama işe yaramaz gibi görünüyor.Lambda varlık çerçevesinde dinamik nasıl sıralanır?

////string column_name // the name of column in table <<< don't care this, I finished 
////string sort_order // ASC or DESC <<< don't care this, I finished 

using (var db = new ABCEntities()) 
{ 
    // get dynamic type of column name , but i can not 
    // ??????????? 
    var columnExp = typeof(LOCATION).GetProperty(column_name); 

    IEnumerable<LOCATION> query = db.LOCATIONs; 
    if(sort_order = "ASC") 
    { 
     query = query.OrderBy(columnExp).Tolist(); 
    } 
    else 
     query = query.OrderByDescending(columnExp).Tolist();  
} 

ben takip

query = db.LOCATIONs.OrderByDescending(q => q.GetType().GetProperty(column_name).GetValue(q, null)).ToList(); 

ile deneyin Ama bana bazı hata ya da yanlış ve nasıl bunu düzeltmek için söyleyebilir

LINQ to Entities does not recognize the method 'System.Object GetValue(System.Object, System.Object[])' method, and this method cannot be translated into a store expression 

de hata alıyorum? Çok teşekkür ederim.

+0

http://stackoverflow.com/questions/31955025/generate-ef-orderby-expression-by-string – Shyju

+0

ben denemek ama işe değil. –

+0

@BrianCrist Lütfen daha spesifik olun. * Ne * çalışmıyor? Ben sadece Dynamic LINQ kullandığınızı varsayarak, 'OrderBy (column_name)' yapmalısınız. –

cevap

3

Dynamic Linq kullanımı nasıl olur? Dizeden sorgu oluşturabilir.

using (var db = new ABCEntities()){ 
    var columnExp = "columnName"; 
    var query = db.LOCATIONs; 
    if(sort_order = "ASC") 
    { 
     query = query.OrderBy(columnExp).Tolist(); 
    } 
    else 
    { 
     query = query.OrderByDescending(columnExp).Tolist(); 
    } 
} 
+0

Oh, işe yaramıyor. Lütfen Dinamik Linq kullanarak sorunumu açıkça –

+0

'a bakın ve kodunuzu yukarıdaki gibi değiştirin. veya kodunuzun daha fazlasını yapıştırın mı? – kcwu

+0

Sevgili kcwu, cevabınız yardımsever, yanında, bu 'var propertyInfo = typeof (LOCATION) .GetProperty (columnName); sorgu = db.LOCATIONs.AsEnumerable() OrderByDescending (x => propertyInfo.GetValue (x, null)) ToList(); '. teşekkür ederim –

İlgili konular