目前..我的代码看起来像这样。
PhoneNumber = x.PhoneNumbers.FirstOrDefault() != null ? x.PhoneNumbers.FirstOrDefault().PhoneNumber : string.Empty,
PhoneNumbers是ICollection<PhoneNumber>
这也在.Select()
中,所以我无法在外面为它创建变量。
Resharper抱怨说x.PhoneNumbers.FirstOrDefault()
可能是空的,说实话,并不是因为我要做两次FirstOrDefault的想法而卖掉。
任何其他想法,我想可能有另一种Lambda方法,我可以做类似的事情。
答案 0 :(得分:12)
PhoneNumber = x.PhoneNumbers.Select(pn => pn.PhoneNumber).FirstOrDefault() ?? "",
答案 1 :(得分:8)
第一个选项,如Markus的:
PhoneNumber = x.PhoneNumbers.Select(x => x.PhoneNumber)
.FirstOrDefault() ?? "";
另一种选择:
PhoneNumber = x.PhoneNumbers.Select(x => x.PhoneNumber)
.DefaultIfEmpty("")
.First();
或者,如果你发现自己做了很多,你可以编写自己的方法来结合这两者:
public static TElement ProjectedFirstOrDefault<TSource, TElement>
(this IEnumerable<TSource> source,
Func<TSource, TElement> selector,
TElement defaultValue) where TElement : class
{
var firstElement = source.FirstOrDefault();
return firstElement == null ? defaultValue : selector(firstElement);
}
然后:
PhoneNumber = x.PhoneNumbers.ProjectedFirstOrDefault(x => x.PhoneNumber, "");
答案 2 :(得分:0)
var result = new List<Product>();
result = result.Where(o => o.Name == (string.IsNullOrEmpty(_nameParameter) ? o.Name : _nameParameter)).ToList();