2009-03-10 6 views
3

simple requête LINQ:LINQ to SQL: propriétés des propriétés qui peuvent être null

from transport in db.Transports 
select new 
{ 
    Current = transport.CurrentLocation, 
    CurrentCarriers = transport.CurrentLocation.Carriers, 
    }; 

Problème: CurrentLocation peut être nul. Si c'est le cas, l'exécution de cette requête renvoie un NullReference. J'ai essayé d'ajouter un contrôle comme

transport.CurrentLocation == null ? null : transport.CurrentLocation.Carriers 

mais Linq à sql ne semble pas pouvoir analyser cela.

Des solutions sympas qui n'impliquent pas l'envoi d'une requête supplémentaire pour chaque transport?

+0

Est-ce que vous voulez dire transport.CurrentLocation ou transport.Current? – Brandon

+0

SOrry, corrigé. –

Répondre

3

Je n'utilise normalement que 'let'.

from x in Foo 
let y = x.Bar 
where y != null 
select y.Baz; 

MISE À JOUR:

Je pense que le ?? l'opérateur traduit en SQL.

1

Il suffit de faire (vous utiliseriez la mauvaise propriété):

transport.CurrentLocation == null? null: transport.CurrentLocation.Carriers

Mise à jour 1: C'est bizarre, j'ai utilisé des requêtes plutôt complexes et je n'ai pas rencontré ce problème. Je viens d'en cocher une, je ne pense pas que cela ait de l'importance, mais la mienne avait la vérification inversée:

transport.CurrentLocation! = Null? transport.CurrentLocation.Carriers: null;

Pouvez-vous publier la requête complète que vous avez essayée qui vous donne l'exception d'analyse?

+0

désolé, c'était juste une faute de frappe (j'ai collé les deux parties du code de nouvelles et anciennes versions respectivement). Corrigé la question. –

3

Si la clé étrangère sur Transports est nullable, vous devrez vérifier cette colonne pour null avant de pouvoir essayer et obtenir l'objet CurrentLocation.

Vous pouvez faire quelque chose comme ceci:

CurrentLocation = transport.currentLocationId != null ? transport.CurrentLocation : null; 
Questions connexes