2010-01-19 126 views

回答

2

您可以在比equals其他什么也没join,但是这可能不是你想反正这里。我会争辩说,SQL查询是不好写的,并且日期比较应该在WHERE条款中,但我认为这是主观的。无论如何,这是该唯一办法做到这一点Linq中:

var results = 
    from sm in salesman 
    join s in sales on sm.salesmanid equals s.salesmanid 
    where s.salesdate < sm.promotiondate 
    group s by s.salesmanid into g 
    select new { salesmanid = g.Key, maxsales = g.Max(s => s.quantity) }; 

注 - 组一行

+0

我刚刚读了一个地方,你可以在连接后直接使用where子句来提高性能(过滤),然后在where子句之后继续加入其他表。所以我现在要尝试一下。 我想将这种方法应用于现有的数据库,我已经遇到了一个SQL查询加入过滤。它有大约200万条记录,以及我想要加入的表格。做一个直的where子句而不是使用过滤的连接会导致性能非常难。感谢您的回答,我现在要尝试一下。我会让你知道它是怎么回事。 – Mike 2010-01-19 23:59:18

+0

@Mike - 嗯,如果条件是'JOIN'或'WHERE'的一部分,那么无关紧要,DB服务器真正重要的是正确的列被索引。我更喜欢在实际的连接子句中编写所有连接条件,但那只是因为它更容易正确执行。 – Aaronaught 2010-01-20 00:03:56

+0

它似乎没有任何区别。如你所说。再次感谢。 – Mike 2010-01-21 03:40:14

0

纠正错字假设你有你的表之间的导航性能,你可以离开加盟实体框架。

var results = from s in salesmen 
       group s by s.salesmanid 
       select new 
       { 
        s.salesmanid, 
        maxsales = s.sales 
         .where(x => s.salesdate < x.promotiondate) 
         .max(x => x.quantity) 
       };