我有一个表,其中包含Time1和Time2 (出于示例目的)。Time2允许空值。
我有一个对象模型,我想让Time2为可空的;到目前为止,我已经有了:
public Class MyModel{
public DateTime Time1 {get;set;}
public System.Nullable<DateTime> Time2 {get;set}
}当我转到我的查询时,我有这样的结果:
var MyQuery = ...
select new MyModel()
{
Time2 = (a.Time2)这里我想知道是否应该使用SingleOrDefault运算符?它不会显示在智能感知中。然而,智能感知还显示了其他几个选项,其中包括: HasValue、Value、GetValueOrDefault。
有没有什么好主意可以选择的?
谢谢
发布于 2011-03-10 04:54:29
这是因为Time2是一个可以为空的类型。可为空的类型始终具有value属性。如果您将行修改为:
Time2 = (a.Time2).Value然后在Value后面按句点符号,您将看到Intellisense弹出。
作为安全检查,您可能还希望在使用.Value之前检查a.Time2的值不为空。否则,您将获得空引用异常
发布于 2011-03-10 05:27:41
如下所示,SingleOrDefault是通用IEnumerable的扩展方法。
`public static TSource SingleOrDefault( this IEnumerable source)` 如果您有一些Nullable列表,您可以使用该方法,如果列表中没有或多个项,它将返回第一个值或抛出。
//a list of Nullable<DateTime> with exactly 1 item
var listOfDates = new DateTime?[] { null };
var myDate = listOfDates.SingleOrDefault(); // myDate => ((DateTime?)null)这可能不是您想要的,当它为null时,您想要一些值,那么您应该使用C# 3.0的coalesce运算符或来自Nullable<>类型的GetValueOrDefault方法的重载之一。
DateTime? myNullDate = null;
DateTime myDate;
myDate = myNullDate ?? DateTime.Now; // myDate => DateTime.Now
myDate = myNullDate ?? default(DateTime); // myDate => DateTime.MinValue
myDate = myNullDate.GetValueOrDefault(DateTime.Now); // myDate => DateTime.Now
myDate = myNullDate.GetValueOrDefault(); // myDate => DateTime.MinValue发布于 2011-03-10 05:00:48
Time2 = a.Time2.HasValue ? a.Time.Value : null;https://stackoverflow.com/questions/5251979
复制相似问题