当对象为null且属性为整数时,如何使用OrderBy Linq

时间:2016-04-15 16:18:31

标签: c# linq

我想订购一个属性为null的集合,但如果不使用整数属性。

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

Employees是一个扩展List`Employee的类。并且Employee具有属性状态,该状态来自类Status

我在OrderBy方法中收到一条消息“运算符??不能应用于Status和int类型的操作数”

2 个答案:

答案 0 :(得分:4)

如果-1Status,则您可以使用null(或您知道的有效ID范围之外的任何其他值):

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

答案 1 :(得分:0)

如果这是来自SQL DB你应该没问题,如果调用数据库就不会发生空引用。如果您只是调用order by,默认情况下nulls将返回到顶部。

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

如果您从linq调用对象,则必须检查null

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