首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >linq on nullable

linq on nullable
EN

Stack Overflow用户
提问于 2011-03-10 04:49:44
回答 4查看 31.4K关注 0票数 3

我有一个表,其中包含Time1和Time2 (出于示例目的)。Time2允许空值。

我有一个对象模型,我想让Time2为可空的;到目前为止,我已经有了:

代码语言:javascript
运行
复制
public Class MyModel{
   public DateTime Time1 {get;set;}
   public System.Nullable<DateTime> Time2 {get;set}
}

当我转到我的查询时,我有这样的结果:

代码语言:javascript
运行
复制
var MyQuery = ...
   select new MyModel()
   { 
      Time2 = (a.Time2)

这里我想知道是否应该使用SingleOrDefault运算符?它不会显示在智能感知中。然而,智能感知还显示了其他几个选项,其中包括: HasValue、Value、GetValueOrDefault。

有没有什么好主意可以选择的?

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-10 04:54:29

这是因为Time2是一个可以为空的类型。可为空的类型始终具有value属性。如果您将行修改为:

代码语言:javascript
运行
复制
Time2 = (a.Time2).Value

然后在Value后面按句点符号,您将看到Intellisense弹出。

作为安全检查,您可能还希望在使用.Value之前检查a.Time2的值不为空。否则,您将获得空引用异常

票数 9
EN

Stack Overflow用户

发布于 2011-03-10 05:27:41

如下所示,SingleOrDefault是通用IEnumerable的扩展方法。

代码语言:javascript
运行
复制
 `public static TSource SingleOrDefault(     this IEnumerable source)` 

如果您有一些Nullable列表,您可以使用该方法,如果列表中没有或多个项,它将返回第一个值或抛出。

代码语言:javascript
运行
复制
//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方法的重载之一。

代码语言:javascript
运行
复制
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
票数 4
EN

Stack Overflow用户

发布于 2011-03-10 05:00:48

代码语言:javascript
运行
复制
Time2 = a.Time2.HasValue ? a.Time.Value : null;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5251979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档