c# - 运算符 '??' 不能应用于类型 'System.Guid?' 和 'string' 的操作数

标签 c# linq casting

我在使用以下代码的 LINQ 查询中遇到此错误:

"Operator '??' cannot be applied to operands of type 'System.Guid?' and 'string'"

我有一个可空的GUID对象,这里我检查GUID对象是否为null,然后我需要返回 String.Empty 否则会将 GUID 转换为 string

List<Report> queryresult =
    reportDatatable.AsEnumerable()
        .Where(c => c.Field<Guid?>("ParentID") == Guid.Parse("XXXXXX-XXX-XXXXX-XXXXX-XXX))
        .Select(c=> new Report()
        {
            ID = (c.Field<Guid?>("ID") ?? String.Empty).ToString(), //error here
            ...
        }).ToList();

下面的链接是检查 object 是否为 null 的最简单方法。

建议检查 GUID 对象 是否为 null 的任何其他方法

最佳答案

编辑:

显然,最适合您需要的是:

ID = (c.Field<Guid?>("ID") ?? Guid.Empty) == Guid.Empty ? String.Empty : c.Field<Guid?>("ID").ToString(), //try this

原创

将您的 GUID 转换为 string第一:

c.Field<Guid?>("ID").ToString() ?? String.Empty

那么应该就可以了。

否则,使用 Guid.Empty而不是 String.Empty这里的想法是双方都在??必须匹配。喜欢比较AppleApple

防止c.Field<Guid?>("ID") == null正在执行,在 C#6 中,您可以像这样使其更简单

c.Field<Guid?>("ID")?.ToString() ?? String.Empty

关于c# - 运算符 '??' 不能应用于类型 'System.Guid?' 和 'string' 的操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35078324/

相关文章:

c# - 使用通配符过滤字符串列表

java - 在运行时通过反射进行强制转换

C - 将 void* 转换为 thrd_create() 中的结构

c++ - C++中多继承中使用的reinterpret_cast

c# - Entity Framework ,比较复杂类型

c# - OrderBy 子集合特定类别

c# - 使用HTML5 FileReader、c#、jquery上传文件

c# - GCHandle。如何固定包含定义为类的字段的对象

linq - 如何在 OS X 上的 MonoDevelop 2.0 中使用 Linq?

c# - 如何使用 opencv 均衡图像的对比度和亮度?