是否可以使用三元运算符来反映此逻辑?
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
。
答案 0 :(得分: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)
编辑:
as @James说方法只适用于Linq-to-object而不是Linq-to-entities
答案 1 :(得分:4)
是的,这是可能的。我认为使用三元运算符很难得到运算符优先级,所以我更喜欢使用parantheses:
AuthorizationStatus = x.InternalHolidayStatus == 1 ?
HolidayStatus.Pending :
(x.InternalHolidayStatus == 2 ?
HolidayStatus.Rejected :
(x.InternalHolidayStatus == 3 ?
HolidayStatus.Authorized :
HolidayStatus.Invalid))
由于这是枚举的映射,因此如果对于枚举值使用与数据库中相同的值是可行且可行的话,也可以使用@wodzik建议使用强制转换。
要使用它,您必须将explictility分配给枚举值
public enum HolidayStatus
{
Pending = 1,
Rejected = 2,
Authorized = 3
}
然后你可以这样做:
AuthorizeStatus = (HolidayStatus)x.InternalHolidayStatus