0
votes

C # lambda null conditionnel

J'ai suivi DTO:

  var users = from vkuser in _context.VkUsers
                join contextUser in _context.Users on vkuser.Uid equals contextUser.Uid
                join userClaim in _context.UserClaims on contextUser.Id equals userClaim.UserId
                let userBanOffset = contextUser.LockoutEnd
               // let userBan = userBanOffset.HasValue ? userBanOffset.Value.Date : null
                select new DTO_UserWithCreds
                { 
                    Name = vkuser.Name,
                    Surname = vkuser.Surname,
                    Ava1 = vkuser.Ava1,
                    Uid = vkuser.Uid,
                    Type =  DTO_UserWithCreds.FromString(userClaim.ClaimValue),
                    BanDateTime = contextUser.LockoutEnd?.DateTime 
                };


1 commentaires

Vous pouvez essayer: let userban = userBanoffset.hasvalue? userBanoffset.value.date: (DateTime?) NULL . J'ai souvent ce problème avec nullable DateTime dans un opérateur tertiaire. Il ne peut pas comprendre quel type le null est censé être, de sorte que vous devez lui donner un indice.


4 Réponses :


2
votes

Vous pouvez lancer le null sur datetime? : xxx


0 commentaires

2
votes

Vous avez juste manqué une distribution: xxx


0 commentaires

1
votes

Votre problème est ici: xxx pré>

Quel type est userban code>? Comment le compilateur est-il censé comprendre? userbanoffset.value.date.date code> est un DateTime code>, mais null code> n'est pas et ne peut pas être un DateTime code> car DateTime code> est un type de valeur et des types de valeur ne peuvent pas être nuls. P>

Pour résoudre ce problème, vous devez dire em> it que null est un nullable code> afin qu'il puisse résoudre l'ambiguïté: p> xxx pré>

Vous pouvez également faire: p>

let userBan = userBanOffset.HasValue ? (DateTime?)userBanOffset.Value.Date : null


1 commentaires

Merci, je n'ai pas pu penser à "(DateTime?) NULL" chose. En outre, il y a Stackoverflow.com/Questtions/44681362/... afin que cela ne fonctionne peut-être pas du tout? J'ajoute beaucoup de code alors ne peut pas tester cette partie en ce moment.



-1
votes

Changer xxx

à xxx


1 commentaires

Cela a le même problème que le premier problème car l'opérateur conditionnel ne sait pas quel type doit être utilisé pour DateTime et null . Aussi l'OP a une faute de frappe. Il devrait être contextueluser.lockoutend.date .