Что не так с приведенным ниже запросом, я получаю эту ошибку:
Обнуляемый объект должен иметь значение.
Dim subscriptionUsers = From inv In dataContext.Invoices.ToList Join u In dataContext.Users _
On inv.Subscription Equals u.Subscription _
Where inv.Id.Value = invoiceID _
And Not u.Fund.Title.Contains("AGM") _
And DirectCast(IIf(Not u.EndDate.HasValue, IIf(u.StartDate.Value <= inv.EndDate.Value, True, False), _
IIf((u.StartDate.Value >= inv.StartDate.Value And u.StartDate.Value <= inv.EndDate.Value) Or _
(u.EndDate.Value >= inv.StartDate.Value And u.EndDate.Value <= inv.EndDate.Value) Or _
(u.StartDate.Value < inv.StartDate.Value And u.EndDate.Value > inv.EndDate.Value), True, False)), Boolean) _
Group By Key = u.Fund.Title Into Group _
Select Fund = Key, UsersCount = Group.Count, Users = Group.ToList, _
SubFunds = (From a In dataContext.Allocations Where a.Fund.Title = Key Select a.Department.Title Distinct)
Если я удаляю u.EndDate.Value в условии, тогда он работает нормально.
Вот трассировка стека:
в System.Nullable 1.get_Value()
at SDBReports.InvoiceAllocationReportUserControl._Lambda$__4(VB$AnonymousType_0
2 $ VB $ It)
в System.Linq.Enumerable.WhereEnumerableIterator 1.MoveNext()
at System.Linq.Lookup
2.Create [TSource] (IEnumerable 1 source, Func
2 keySelector, Func 2 elementSelector, IEqualityComparer
1 компаратор)
at System.Linq.GroupedEnumerable 4.GetEnumerator()
at System.Linq.Enumerable.WhereSelectEnumerableIterator
2.MoveNext ()
at System.Linq.SystemCore_EnumerableDebugView`1.get_Items ()
p.s. Я использовал SPMetal для создания классов сущностей в списках SharePoint.
Для большей ясности:
не путайте с u.EndDate.Value и inv.EndDate.Value
вот истинная часть для u.EndDate.Hasvalue:
IIf((u.StartDate.Value >= inv.StartDate.Value And u.StartDate.Value <= inv.EndDate.Value) Or _
(u.EndDate.Value >= inv.StartDate.Value And u.EndDate.Value <= inv.EndDate.Value) Or _
(u.StartDate.Value < inv.StartDate.Value And u.EndDate.Value > inv.EndDate.Value), True, False)
а вот и фальшивая часть
IIf(u.StartDate.Value <= inv.EndDate.Value, True, False)