我在使用以下代码的LINQ
查询中收到此错误:
“接线员'??'不能应用于'System.Guid'类型的操作数?和'string'“
我有一个nullable GUID object
,我在这里检查GUID Object
是null
,然后我需要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
答案 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
这里的想法是??
中的双方必须匹配。比较Apple
与Apple
为防止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()
Report
类ID
,但这并不总是有用。
答案 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()