首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从'Nullable<Guid>‘返回'Guid’?

如何从'Nullable<Guid>‘返回'Guid’?
EN

Stack Overflow用户
提问于 2011-04-14 19:35:35
回答 5查看 12.9K关注 0票数 1

我试图在下面返回一个Guid值。但是,数据库(和我的dbml)将该列作为nullable Guid,并且它在.Select部分上生成一个异常,表示它不能从IQueryable<System.Guid?>转换为System.Guid

我猜我需要首先使我的返回值“”?是真的?

如果是这样的话,我该怎么用Guid的?

代码语言:javascript
复制
public static Guid GetCurrentWorkerByType(int enrollmentID, int staffTypeID)
{
    using (var context = CmoDataContext.Create())
    {
        IQueryable<tblWorkerHistory> tWorkHist = context.GetTable<tblWorkerHistory>();

        return (tWorkHist.Where(workHist => 
            (workHist.EnrollmentID == enrollmentID) &&
            (workHist.tblStaff.StaffTypeID == staffTypeID) &&
            (workHist.EndDate == null || workHist.EndDate > DateTime.Now))
            .Select(workHist => workHist.Worker));
        }
    }
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-04-14 19:40:19

代码语言:javascript
复制
// Get the Guid? itself, for sake of example from IQueryable<Guid?>
// (could be `null` from DB value or because queryable was empty)
Guid? maybeGuid = queryable.FirstOrDefault();
// Need to have *a* GUID or default it to something
// because a Guid is a value-type and needs *a* value.
Guid theGuid = maybeGuid ?? Guid.Empty;

还请参见Nullable<T>.HasValue/Value --一个更长但等价的方法是:

代码语言:javascript
复制
Guid theGuid = maybeGuid.HasValue ? maybeGuid.Value : Guid.Empty;     

请注意,在一般的HasValue语句中,if可能适合更改逻辑,并注意,如果maybeGuid“无值”-- is null --则Value将抛出异常,这就是需要保护的原因。

编码愉快。

迂回的细节:等效的方法不是“线程安全”。也就是说,假设maybeGuid是共享的,则可以在HasValueValue之间分配null。有许多这样的问题涉及到?? (合并操作符)的“线程安全”--生成的IL有效地使用了一个临时变量,因此该值可能过时,但不能抛出异常。

票数 12
EN

Stack Overflow用户

发布于 2011-04-14 19:38:23

您得到的是一个没有对一个查询执行的查询,对于两个查询,它将返回一个Guid列表,据我所知。如果您想返回第一个Guid或默认值(我认为这是一个零的输出guid),您可以在选择之后使用.FirstorDefault()。

票数 2
EN

Stack Overflow用户

发布于 2011-04-14 19:42:32

试一试

代码语言:javascript
复制
 Change your return type from System.Guid to ?System.Guid // nullable of guid     Then add .FirstOrDefault() after the select call

结构不能为空,但System.Nullable类将结构包装在类中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5668673

复制
相关文章

相似问题

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