0

是否可以使用三元运算符来反映这种逻辑?

if (a = 1)
{
    somevalue = "hello";
} 
else if (a = 2)
{
    someValue = "world";
}
else if (a = 3)
{
    someValue = "hellWorld";
}

我在 LINQ 查询中执行以下操作:

using (var data = new DAL())
{
    var result = data.Holidays.AsNoTracking()
                 .Where(x => x.RequesterId == userId)
                 .Select(x => new HolidayModel
                 {
                     HolidayId = x.HolidayId,
                     FromDate = x.FromDate,
                     ToDate = x.ToDate,
                     AuthorisationStatus = x.InternalHolidayStatus == 1 ?
                         HolidayAuthStatus.Pending :
                         HolidayAuthStatus.Rejected,
                     DateModified = x.ModifiedDate
                 }).ToList();

    return Json(result.ToDataSourceResult(request));
}

HolidayAuthStatus是一个枚举,其中包含三个值(Pending(1)、Authorised(2)和Rejected(3));我想在分配AuthorisationStatus.

4

2 回答 2

4

改成这个

AuthorisationStatus = (HolidayAuthStatus)x.InternalHolidayStatus

如果您的 HolidayAuthStatus 的整数值与 InternalHolidayStatus 值匹配,它将起作用。这里的三元运算符看起来很糟糕。如果您的状态码不匹配,最好让函数接受int status和返回HolidayAuthStatus

HolidayAuthStatus GetStatus(int status)
{
    if(status == 1) return HolidayAuthStatus.Pending;
    if(status == 2) return HolidayAuthStatus.Authorised;
    if(status == 3) return HolidayAuthStatus.Rejected;
    return HolidayAuthStatus.Unknown; // for e.g.
}

并像这样使用它:

AuthorisationStatus = GetStatus(x.InternalHolidayStatus)

编辑:

正如@James 所说,该方法仅适用于 Linq-to-object 而不是 Linq-to-entities

于 2013-11-14T12:15:37.550 回答
4

是的,这是可能的。我认为使用三元运算符很难使运算符优先级正确,因此我更喜欢使用括号:

AuthorizationStatus = x.InternalHolidayStatus == 1 ?
    HolidayStatus.Pending :
    (x.InternalHolidayStatus == 2 ?
        HolidayStatus.Rejected : 
        (x.InternalHolidayStatus == 3 ?
            HolidayStatus.Authorized : 
            HolidayStatus.Invalid))

由于这是到枚举的映射,因此也可以像@wodzik 建议的那样使用强制转换,如果可以且可行地对枚举值使用与数据库中相同的值。

要使用它,您必须明确地将值分配给枚举

public enum HolidayStatus
{
    Pending = 1,
    Rejected = 2,
    Authorized = 3
}

然后你可以这样做:

AuthorizeStatus = (HolidayStatus)x.InternalHolidayStatus
于 2013-11-14T12:15:38.110 回答