接线员'??'不能应用于'System.Guid'类型的操作数?和'字符串'

时间:2016-01-29 06:37:44

标签: c# linq casting

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

  

“接线员'??'不能应用于'System.Guid'类型的操作数?和'string'“

我有一个nullable GUID object,我在这里检查GUID Objectnull,然后我需要return String.Empty其他人将转换{{} 1}}到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 object

4 个答案:

答案 0 :(得分:3)

修改:

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

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

答案 1 :(得分:1)

假设Nullable<>的{​​{1}}覆盖产生一个空字符串,如果该值为null,则可以简单地写

ToString()

根据您的举报代码,最好还是ID = c.Field<Guid?>("ID").ToString() ReportID,但这并不总是有用。

答案 2 :(得分:0)

您需要为Guid.Empty运算符返回String.Empty而不是??,因为左侧是Guid而不是string。这就是编译器错误&#34;运算符&#39;&#39;不能应用于类型&#39; System.Guid的操作数?&#39;和&#39;字符串&#39;&#34; 建议。

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

修改

如果你想要空字符串,那么你可以让条件为Guid.Empty返回空字符串。您的查询最终将会出现类似内容。

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

答案 3 :(得分:0)

由于您有可空的GUID,您可以使用HasValue来检查值是否存在

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