使用左连接c#计算linq中的每个列

时间:2015-03-30 19:46:44

标签: c# sql-server linq

如何使用linq c#

执行此查询
SELECT count(tp.column1), count(tf.column2) FROM table1 tp
left join table2 tf on tf.column1= tp.column2

预期结果:

column1 column2
39685   12

我有以下代码:

var query = (from t in  table1
            from t2 in  table2.Where (t2=> t2.column2 == t1.column1).DefaultIfEmpty()
            select new {
                x =  t1.column1,
                b = t2.column2
            });

如何在sql中计算这些列?

1 个答案:

答案 0 :(得分:2)

你需要欺骗你的LINQ提供者认为它有一个要处理的集合集合,以便你的Count()被评估为SQL的一部分,而不是调用一个循环 - 一个人旅行。你可以通过"分组"这些价值观都集中在一个大集团中。

var query = 
    from t in table1
    let t2 = table2.Where (t2=> t2.column1 == t2.column2)
    group new{t, t2} by 0 into g
    select new{
        column1 = g.Count()
        column2 = g.SelectMany(e => e.t2).Count()
    }