又学一招—— Nullable<T>比较
来源:互联网 发布:mac怎么设置ppt母版 编辑:程序博客网 时间:2024/06/17 13:33
问题是这样 :
- 数据库中有一个字段是GUID类型的,而且允许为空。
- 通过ORM映射成的实体中该字段就是GUID?类型的,也就是本文所说的Nullable类型
- 然后功能需求是:要与数据库中该字段进行比较,传进看参数是GUID类型
错误就发生了:
然后我们来了解一下nullable类型
[Serializable] [TypeDependency("System.Collections.Generic.NullableComparer`1")] [TypeDependency("System.Collections.Generic.NullableEqualityComparer`1")] public struct Nullable<T> where T : struct { // // 摘要: // 将 System.Nullable<T> 结构的新实例初始化为指定值。 // // 参数: // value: // 一个值类型。 [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] public Nullable(T value); public static explicit operator T(Nullable<T> value); public static implicit operator Nullable<T>(T value); // 摘要: // 获取一个值,指示当前的 System.Nullable<T> 对象是否有值。 // // 返回结果: // 如果当前的 System.Nullable<T> 对象具有值,则为 true;如果当前的 System.Nullable<T> 对象没有值,则为 // false。 public bool HasValue { get; } // // 摘要: // 获取当前的 System.Nullable<T> 值。 // // 返回结果: // 如果 System.Nullable<T>.HasValue 属性为 true,则为当前 System.Nullable<T> 对象的值。如果 System.Nullable<T>.HasValue // 属性为 false,则将引发异常。 // // 异常: // System.InvalidOperationException: // System.Nullable<T>.HasValue 属性为 false。 public T Value { get; } // 摘要: // Indicates whether the current System.Nullable<T> object is equal to a specified // object. // // 参数: // other: // 一个对象。 // // 返回结果: // 如果 other 等于当前的 System.Nullable<T> 对象,则为 true;否则为 false。此表描述如何定义所比较值的相等性:返回值说明trueSystem.Nullable<T>.HasValue // 属性为 false,并且 other 参数为 null。即,根据定义,两个 null 值相等。- 或 -System.Nullable<T>.HasValue // 属性为 true,并且 System.Nullable<T>.Value 属性返回的值等于 other 参数。false当前 System.Nullable<T> // 结构的 System.Nullable<T>.HasValue 属性为 true,并且 other 参数为 null。- 或 -当前 System.Nullable<T> // 结构的 System.Nullable<T>.HasValue 属性为 false,并且 other 参数不为 null。- 或 -当前 System.Nullable<T> // 结构的 System.Nullable<T>.HasValue 属性为 true,并且 System.Nullable<T>.Value 属性返回的值不等于 // other 参数。 public override bool Equals(object other); // // 摘要: // 检索由 System.Nullable<T>.Value 属性返回的对象的哈希代码。 // // 返回结果: // 如果 System.Nullable<T>.HasValue 属性为 true,则为 System.Nullable<T>.Value 属性返回的对象的哈希代码;如果 // System.Nullable<T>.HasValue 属性为 false,则为零。 public override int GetHashCode(); // // 摘要: // 检索当前 System.Nullable<T> 对象的值,或该对象的默认值。 // // 返回结果: // 如果 System.Nullable<T>.HasValue 属性为 true,则为 System.Nullable<T>.Value 属性的值;否则为当前 // System.Nullable<T> 对象的默认值。默认值的类型为当前 System.Nullable<T> 对象的类型参数,而默认值的值中只包含二进制零。 [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] public T GetValueOrDefault(); // // 摘要: // 检索当前 System.Nullable<T> 对象的值或指定的默认值。 // // 参数: // defaultValue: // 如果 System.Nullable<T>.HasValue 属性为 false,则为一个返回值。 // // 返回结果: // 如果 System.Nullable<T>.HasValue 属性为 true,则为 System.Nullable<T>.Value 属性的值;否则为 // defaultValue 参数。 public T GetValueOrDefault(T defaultValue); // // 摘要: // 返回当前 System.Nullable<T> 对象的值的文本表示形式。 // // 返回结果: // 如果 System.Nullable<T>.HasValue 属性为 true,则是当前 System.Nullable<T> 对象的值的文本表示形式;如果 // System.Nullable<T>.HasValue 属性为 false,则是一个空字符串 ("")。 public override string ToString(); }
于是修改代码如下
public List<BO_BaseInfo> GetByBot(string botName, string pid) { var list = new List<BO_BaseInfo>(); if (string.IsNullOrEmpty(pid) || pid == "null") { list = _dbContext.BO_BaseInfo.Include("BO_BOAlias").Where(w => w.BOT.Equals(botName) && !w.PID.HasValue) .OrderBy(o => o.OrderIndex) .ThenBy(t => t.CreatedDate) .ToList(); } else { var pId = Guid.Parse(pid); //先获得所有存在pid的数据,因为当guid?值为空的时候,获得其value值会抛出异常 var query = _dbContext.BO_BaseInfo.Include("BO_BOAlias").Where(w => w.BOT.Equals(botName) && w.PID.HasValue); list = query.Where(w => w.PID.Value.Equals(pId)) .OrderBy(o => o.OrderIndex) .ThenBy(t => t.CreatedDate) .ToList(); } return list; }
其中的PID是guid?的类型
问题终于得到解决,以后再深深体会nullable类型的数据处理的不同吧
0 0
- 又学一招—— Nullable<T>比较
- Nullable<T>
- Nullable<T>、?、??
- Nullable<T> 与 T?
- Nullable<T> 的实现
- System.Nullable<T> int?
- Nullable<T>,?,??使用
- model 类 的Nullable<T>
- oc——nonnull、nullable、null_resettable、__null_unspecified
- 为什么Nullable<T>结构能为null
- 可空类型Nullable<T>小结
- System.Nullable<T> 的简单理解
- 谈谈Nullable<T>的类型转换问题
- Nullable
- @Nullable
- 理解null值和C#中可空类型(NullAble<T>)
- 剑指Offer——巧妙使用sort(List<T>,Comparator<? super T>)比较器
- 【基础语言学习】C#中的可空类型运算(Nullable<T>)------T?
- Python Network Programming(7)---泊松分布与发包
- JS无法调用Controller(已解决)
- Java中怎样将类对象自动排序,放入某个集合
- 给查询出的SQL记录添加序号列
- 装饰模式
- 又学一招—— Nullable<T>比较
- HIVE中数据更新(update)操作的实现
- 四个对策,应对裸辞大风险!
- Servlet Http 404
- RedHat6.4修改IP地址
- OpenStack Dashboard二次开发环境的搭建
- iOS --- 获取UIView的模糊效果截图
- 神奇的多态
- 遍历序列唯一确定二叉树的问题 此博文包含图片http://blog.sina.com.cn/s/blog_a49d9ef801014b7u.html