我如何使用Linq查询计数没有。查询中的记录

时间:2010-12-10 09:17:50

标签: linq

var emailToProcess = 
    from a in db.EmailNotToProcess
    join b in EmailUids on a.ENTPUId equals b.Uid
    where a.ENTPUId != b.Uid
    select b;

这里的EmailUids是一个List,而EmailUid是struct中的一个struct,我们有两个选项,比如

public int EmailId;
public string Uid;

这个..

所以我正在执行查询,但我无法计算此查询中的记录数...

感谢....

4 个答案:

答案 0 :(得分:8)

您可以使用Count()方法:

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();

答案 1 :(得分:1)

您正尝试通过Linq-SQL加入SQL表,并使用外部List,我认为不支持

答案 2 :(得分:1)

如果列表中只有少数ID,那么您可以使用Contains。这会将每个整数作为参数传递给SQL:

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

int count = emailToProcess.Count(); 

注意:

如果在EmailUids中有1000个ID,那么您将不得不重新考虑您的策略。将ID列表移动到SQL表中(因此LinqToSQL可以执行从LINQ到原始SQL的转换),或者您必须撤回EmailNotToProcess的整个行集,然后在客户端上执行连接。

如果不知道你在每个表/列表中处理了多少数据,就很难建议。

答案 3 :(得分:0)

可能包含:

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();