2016-03-21 13 views
1

Listeyi bir ada göre sıralamaya çalışıyorum, ancak kimliğim olduğunda bunu nasıl yapacağımı bilmiyorum. Örnek: kimliklerini SıralamaLinq OrderBy - İsimle Olun Kimliği

public class CustomTask { 

    int categoryid; 
} 

public class DataOption { 
    int id; 
    string name; 
} 

public void Sort() { 

    List<DataOption> TheListContainingTheCategories = ...; 

    // The List containing my CustomTasks 
    List<CustomTask> listTempTasks = ... 
    var listTasksSorted = listTempTasks.OrderBy(...).ToList(); 
} 

değil gerçekten zor, ama ben isimlerle göre sıralayabilir istediğinizde bunu nasıl? Yardımlarınız için

Teşekkür

+1

Ben doğru anlamak, id tarafından CustomTask ve DataOption eşleştirmek istiyor ve sıralama adıyla? Eğer öyleyse, Linq –

+2

'daki 'Join' operatörüne bakın. Sadece 'CustomTask' sınıfınızın üyesi olan özelliklere göre sıralayabilirsiniz - çünkü bu sınıfta, sıralayamayacağınız herhangi bir 'name 'özelliği yoktur. – Alex

+0

, 'CustomTask' sınıfına ihtiyacınız olan şeyi yerine getirmek için' Name' özelliği eklemeniz gerekir .. aksi takdirde 'categoryid' –

cevap

0

bu deneyin:

public void Sort() 
{ 
     List<DataOption> TheListContainingTheCategories = ...; 
     Dictionary<int, string> lookup = TheListContainingTheCategories.ToDictionary(x => x.id, x => x.name); 
     List<CustomTask> listTempTasks = new List<CustomTask>(); 
     var listTasksSorted = listTempTasks.OrderBy(c => lookup[c.categoryid]).ToList(); 
} 

Eğer eşleşen

DataOption.name göre sıralamak istiyorum verildiğinde DataOption.id == CustomTask.categoryId

1

Bunu yapmanın en kısa yolunu tahmin edin

var listTasksSorted = from ct in listTempTasks 
         join d in TheListContainingTheCategories on ct.categoryid equals d.id 
         orderby d.name 
         select new {ct, d}; 

sonra listTasksSorted Yani liste Adı göre sıralanır bu

linq result order by name

benziyor ve kimliği en birlikteyiz ve

Bir Alternatif

olacağını ekstra işlevler veya üyelerin gerek
var listTasksSortedAlternative = TheListContainingTheCategories.Where(d => 
           listTempTasks.Any(ct => 
           d.id == ct.categoryid)).OrderBy(d => d.name); 

alternative linq

+0

Ya da sadece OP'nin ihtiyacı varsa ct'yi seçin DataOption sadece –

+0

@KooKiz'i sıralamak için evet sadece alabildiği her şeyi aldı çünkü sıralamadan sonra neye ihtiyacı olduğunu bilmiyorum;) –

+0

Hehehe ... Ben tamamen xD – Alex