Когда вы создаете interactions
, его тип не является анонимным типом int и DateTime, он имеет тип int и nullable DateTime.Это связано с тем, что в своем встроенном операторе if вы никогда не вызываете .Value
из столбца, допускающего значение NULL.Ваш код должен работать, если вы создаете interactions
следующим образом:
var interactions = from i in context.Interactions
join pp in context.Party_Participation on i.Party_Id equals pp.Party_Id
group i.Last_Update_Date_Time.HasValue ? i.Last_Update_Date_Time.Value : i.Create_Date_Time by
pp.Participation_Id
into i1
select new {ParticipationId = i1.Key, CreateDateTime = i1.Max()};
Упрощенный пример:
var lst = new int?[] { 2,3,null,5,5 };
var lst2 = new int[] { 2,3,4,5,6 };
lst.Select(x => x.HasValue ? x.Value : 0).Union(lst2); //works fine
lst.Select(x => x.HasValue ? x : 0).Union(lst2); //throws error
lst.Select(x => x ?? 0).Union(lst2); //also works
Даже если мы легко видим, что встроенный оператор if никогда не вернет нользначение в любом случае, компилятор не может дать такие гарантии и должен ввести возвращаемое значение равным null int во втором случае.