2009-06-03 5 views
0

d'abord, jetez un oeil à ce filLINQ to DataSet gauche Join, comment le comte nulls

LINQ to Dataset DBNULL problem/null reference exception

Le lien vous donne ci-dessus comment LEFT JOIN et la colonne SELECT qui ont une valeur NULL dans sans prendre une erreur d'exception.

Mon problème est que je veux COUNT la colonne est nulle dans la clause WHERE (après ma LEFT JOIN, une valeur NULL pop-up dans la colonne), quelque chose comme ceci:

int tmp1 = 
(
from n in dt_query 
join m in dt_query2 
on n.Field<string>("VC_CLIENT_MAXID") equals m.Field<string>("VC_CHAT_MAXID") into nm 
from m in nm.DefaultIfEmpty() 
where 
    //string.IsNullorEmpty(m.Field<string>("VC_CHAT_STAFF")) 
    //DBNull.Value.Equals(m.Field<string>("VC_CHAT_STAFF")) 
    //m.IsNull("VC_CHAT_STAFF") 
    //object.Equals(m.Field<string>("VC_CHAT_STAFF"), xxx) <<< String xxx = null on above 
    select n.Field<string>("VC_CLIENT_MAXID") 
    ).Count(); 

Les lignes commentées sont les J'ai essayé la solution, mais cela n'a pas fonctionné pour moi. Toute aide serait appréciée.

Répondre

1

Si ce que vous demandez est comment compter le nombre d'enregistrements où la table jointe est nulle, essayez-le. Si je vous ai mal compris, s'il vous plaît faites le moi savoir dans un commentaire et je me ferai un plaisir de mettre à jour.

+0

Cela a fonctionné pour moi (cette fois)! Mais j'ai quelque chose à te demander. Que signifie "m == null"? Je pense que filtrer la valeur NULL dans la colonne spécifiée n'a pas fonctionné avec cela (Parce que je ne peux pas dire quelle colonne j'ai vérifié pour NULL de toute façon). Que faire si la table A a VC_CLIENT_MAXID à joindre et VC_CHAT_STAFF à partir de la table B est NULL depuis le début? Je pense que je vais me tromper? –

+0

J'ai renommé m en "LeftJoinM" pour le rendre un peu plus clair. "m == null" ou maintenant "LeftJoinM == null" vérifie essentiellement si la jointure a échoué. Il retourne tous les enregistrements qui n'ont pas pu être joints. –

+0

SELECT COUNT (*) FROM VC_CLIENT LEFT JOIN VC_CHAT ON VC_CLIENT_MAXID = VC_CHAT_MAXID O WH VC_CHAT_STAFF EST NULL > Mon point est "m == null" n'est pas la réponse parfaite pour traduire cette requête. Comme vous pouvez le voir, si VC_CHAT contient des données nulles VC_CHAT_STAFF, je ne peux pas le sélectionner car "m == null" ne peut me fournir que des lignes dont la jointure a échoué. Ai-je raison ? Que traduisez-vous cette requête dans la syntaxe LINQ? parce que je reçois NullException quand j'ai essayé d'appeler "m.Field (" VC_CHAT_STAFF ")" dans la clause WHERE Quoi qu'il en soit, merci beaucoup de votre réponse ci-dessus. Ça m'aide beaucoup! –

0

Je n'ai pas testé le code..Hope suivant cela devrait fonctionner

int tmp1 = 
     (
     from n in dt_query 
     join m in dt_query2 
     on n.Field<string>("VC_CLIENT_MAXID") 
      equals m.Field<string>("VC_CHAT_MAXID") into nm 

     from temp in nm.where(t => t.Field<string>("VC_CLIENT_MAXID") ==null).DefaultIfEmpty() 


     select VC_CLIENT_MAXID= (temp== null) ? "" :n.Field<string>("VC_CLIENT_MAXID"); 
     ).Count(); 
Questions connexes