我有一个描述存储的各种电话的类。有时Importance
属性可以为null。这是班级
public class PhoneTypeListInfo
{
public string AccountNum { get; set; }
public int PhoneType { get; set; }
public string PhoneNum { get; set; }
public int Importance { get; set; }
}
如果电话号码和帐号与给定的一组值匹配,我已经定义了一个返回PhoneTypeListInfo
的函数。
protected PhoneTypeListInfo RetrievePhoneType(string info, string acctNumber)
{
PhoneTypeListInfo type = xPhoneTypeList.Where(p => p.PhoneNum == info && p.AccountNum == acctNumber).FirstOrDefault();
return type;
}
这一切都很棒。我遇到的问题是下面的linq查询。
List<AlertBasedPhones> xAccountPhones = new List<AlertBasedPhones>();
xAccountPhones = (from x in xAccountStuff
where x.Media == "Phone"
let p = RetrievePhoneType(x.Info, acct.AccountNumber)
let xyz = x.Importance = (p.Importance as int?).HasValue ? p.Importance : 0
orderby p.Importance descending
select x).ToList();
我上面所做的是尝试使用具有不同构图的不同类,除了获得重要性&#39;来自PhoneTypeListInfo的属性。
我的问题最终是,我需要做什么才能使p.Importance
为空,如果为空则将其设置为0,同时使x.Importance
为0。
答案 0 :(得分:6)
p.Importannce
不是p
,而是?.
本身。这是你需要首先检查null的事情。如果您使用的是C#6,则可以使用(p.Importance as int?).HasValue ? p.Importance : 0
运算符。您还可以将p.Importance ?? 0
的逻辑简化为List<AlertBasedPhones> xAccountPhones = new List<AlertBasedPhones>();
xAccountPhones = (from x in xAccountStuff
where x.Media == "Phone"
let p = RetrievePhoneType(x.Info, acct.AccountNumber)
let xyz = x.Importance = p?.Importance ?? 0
orderby p?.Importance descending
select x).ToList();
。将两者结合起来
DO
$body$
DECLARE
v_name_short VARCHAR;
BEGIN
v_name_short := 'test Account 1';
RETURN QUERY
SELECT
a.name_short,
a.name_long
FROM enterprise.account a
WHERE
CASE WHEN v_name_short IS NOT NULL THEN
LOWER(a.name_short) = LOWER(v_name_short)
ELSE
1 = 1
END;
END;
$body$
LANGUAGE 'plpgsql';
答案 1 :(得分:2)
使用三元运算符。将p.Importance
替换为(null==p) ? 0 : p.Importance