2010-12-10 3 views
2
var emailToProcess = 
    from a in db.EmailNotToProcess 
    join b in EmailUids on a.ENTPUId equals b.Uid 
    where a.ENTPUId != b.Uid 
    select b; 

Ici EmailUids est une liste et EmailUid est un struct à l'intérieur du struct, nous avons deux options commeComment utiliser Linq Query no. de l'enregistrement dans la requête

public int EmailId; 
public string Uid; 

ce ..

donc je suis exécution de la requête, mais je suis pas en mesure de compter combien le dossier dans cette requête ...

merci ....

Répondre

8

Vous pouvez utiliser le Count() Méthode:

var emailToProcess = from a in db.EmailNotToProcess 
        join b in EmailUids on a.ENTPUId equals b.Uid 
        where a.ENTPUId != b.Uid 
        select b; 
int emailCount = emailToProcess.Count(); 
+0

Salut Chère cela ne fonctionne pas parce que vous suggérez que cela me donnera une erreur tout comme ... La séquence locale ne peut pas être utilisée dans les implémentations LINQ à SQL des opérateurs de requête à l'exception de l'opérateur Contient. –

+0

@Jitendra, quelle est l'erreur que vous recevez? –

+0

La séquence locale ne peut pas être utilisée dans les implémentations LINQ à SQL des opérateurs de requête sauf l'opérateur Contains –

1

Vous essayez de joindre une table SQL via LINQ-SQL avec un List externe, que je ne pense pas est prise en charge

+0

Non je ne suis pas rejoindre en tant que table SQL La liste est comme une simple liste et EmailId est la structure. –

+0

db.EmailNotToProcess est une table SQL, EmailUids est une liste externe (vers SQL). Je ne pense pas que les joindre est supporté –

0

Peut-être avec un Contient:

var emailToProcess = 
    from mail in 
     (from a in db.EmailNotToProcess 
     where EmailUids.Select(e => e.Uid).Contains(a.ENTPUI) 
     select a).AsEnumerable() 
    join b in EmailUids on mail.ENTPUId equals b.Uid 
    where mail.ENTPUId != b.Uid 
    select b; 

int count = emailToProcess.Count(); 
+0

Je reçois une erreur comme celle-ci .... la meilleure méthode surchargée pour 'System.Collections.Generic.List .Contains (HMBL.MailManager.EmailUid)' a quelques arguments invalides –

+0

Modifié, pouvez-vous réessayer? Je suis désolé, mais je marche dans l'obscurité ici :) – Philippe

+0

Ca marche mais je ne peux pas compter le no.of Record Je reçois seulement 0 (zéro) résultat ... actully ma cible est 11 –

1

Si sont seulement une poignée d'ID dans la liste, vous pouvez utiliser Contient. Cela passera chaque entier à SQL comme paramètre:

var emailToProcess = from a in db.EmailNotToProcess 
        where !EmailUids.Select(u => u.Uid).Contains(a.ENTPUId) 
        select b; 

int count = emailToProcess.Count(); 

REMARQUE:

S'il y a 1000 d'ID dans EmailUids alors vous aurez à repenser votre stratégie. Déplacez la liste des ID dans une table SQL (afin que LinqToSQL puisse effectuer la traduction de LINQ en SQL brut) ou vous devrez retirer tout l'ensemble de lignes pour EmailNotToProcess, puis effectuer la jointure sur le client.

Il est difficile de vous conseiller sans connaître la quantité de données que vous traitez dans chaque table/liste.

+0

C'est probablement mieux que ce que j'ai écrit. Combiné dans la requête complète, je pense que cela pourrait fonctionner :) – Philippe