据我所知,在LINQ中,方法FirstOrDefault()
可以返回非NULL的Default
值.我还没有弄清楚的是,当查询结果中没有项时,这个(和类似的)方法可以返回NULL以外的哪些东西.有没有什么特殊的方法可以将其设置为,如果特定查询没有值,则返回某个预定义的值作为默认值?
据我所知,在LINQ中,方法FirstOrDefault()
可以返回非NULL的Default
值.我还没有弄清楚的是,当查询结果中没有项时,这个(和类似的)方法可以返回NULL以外的哪些东西.有没有什么特殊的方法可以将其设置为,如果特定查询没有值,则返回某个预定义的值作为默认值?
一般情况,不仅仅是值类型:
static class ExtensionsThatWillAppearOnEverything
{
public static T IfDefaultGiveMe<T>(this T value, T alternate)
{
if (value.Equals(default(T))) return alternate;
return value;
}
}
var result = query.FirstOrDefault().IfDefaultGiveMe(otherDefaultValue);
同样,这无法真正判断序列中是否有was个值,或者第一个值是否为默认值.
如果你关心这件事,你可以这样做
static class ExtensionsThatWillAppearOnIEnumerables
{
public static T FirstOr<T>(this IEnumerable<T> source, T alternate)
{
foreach(T t in source)
return t;
return alternate;
}
}
并用作
var result = query.FirstOr(otherDefaultValue);
尽管正如斯蒂克先生指出的那样,这项工作在.DefaultIfEmpty(...).First()
年前也可以完成.