2016-04-15 62 views
0

我想訂購一個屬性爲null的集合,但如果不使用屬性是整數。如何使用OrderBy Linq當對象爲null並且屬性爲整數

repeaterEmployees.DataSource = employees.Distinct(new EmployeeComparer()) 
             .OrderBy(x => x.Status ?? x.Status.ID); 
repeaterEmployees.DataBind(); 

員工是擴展List`Employee的類。和員工擁有的財產狀況是從階級地位

我得到了在排序依據方法的消息「操作??不能應用於類型狀態的操作數,INT」

+0

嘗試'.OrderBy(X => x.Status == NULL -1:x.Status。 ID)' –

回答

2

可以使用-1(或任何你知道其它的值是有效的ID值的範圍),如果Statusnull這樣外:

repeaterEmployees.DataSource = 
    employees.Distinct(new EmployeeComparer()) 
    .OrderBy(x => x.Status == null ? -1 : x.Status.ID); 
+0

由於我們不確定Status.ID是否爲負值或正值。如何使用int.MinValue在您的解決方案中替換-1? –

+0

@JianHuang,回答更新 –

+1

在C#6中,這可以更短:'x.Status?.ID ?? -1' – Kyle

0

如果這是從SQL數據庫,你應該罰款的到來,空引用,也不會發生,如果調入數據庫。如果你只是打電話訂購,默認情況下,空值將會到達最高點。

repeaterEmployees.DataSource = employees.Distinct(new EmployeeComparer()) 
            .OrderBy(x => x.Status.ID); 
repeaterEmployees.DataBind(); 

如果從LINQ到對象您的電話,你必須檢查空

repeaterEmployees.DataSource = employees.Distinct(new EmployeeComparer()) 
            .OrderBy(x => x.Status == null ? -1 : x.Status.ID); 
相關問題