【发布时间】:2010-03-26 13:50:40
【问题描述】:
以下查询应返回在 ownerGroupIds 中提供了匹配 ID 或与 ownerUserId 匹配的记录。但是 ownerUserId 是否为 null,我希望忽略这部分查询。
public static int NumberUnderReview(int? ownerUserId, List<int> ownerGroupIds)
{
return ( from c in db.Contacts
where
c.Active == true
&&
c.LastReviewedOn <= DateTime.Now.AddDays(-365)
&&
( // Owned by user
!ownerUserId.HasValue ||
c.OwnerUserId.Value == ownerUserId.Value
)
&&
( // Owned by group
ownerGroupIds.Count == 0 ||
ownerGroupIds.Contains( c.OwnerGroupId.Value )
)
select c ).Count();
}
但是,当为 ownerUserId 传入 null 时,我收到以下错误:Nullable object must have a value.
我感到刺痛,我可能不得不在这种情况下使用 lambda 表达式?
【问题讨论】:
-
看起来不错。它在抱怨的一定是
c.OwnerUserId。你能确认一下吗? -
我已将子句更改为
( c.OwnerUserId.HasValue && ownerUserId.HasValue && c.OwnerUserId.Value == ownerUserId.Value )进行测试,但我仍然看到相同的错误消息 -
任何
c.OwnerGroupId可以为空,从而抛出异常吗? -
看起来这个问题比我最初想象的要复杂:peetbrits.wordpress.com/2008/10/18/linq-breaking-your-logic
标签: c# sql linq linq-to-sql lambda