LINQ在最大日期左加入

时间:2013-11-13 08:36:59

标签: linq left-join maxdate

好的,这是我在数据库中的表格:

CREATE DATABASE Temp  
GO --------------------------  
USE Temp  
GO --------------------------  
CREATE TABLE Table1  
    (  
      Table1Id INT IDENTITY(1, 1) ,  
      Name VARCHAR(20) ,  
      CONSTRAINT pk_Table1 PRIMARY KEY ( Table1Id )  
    )  
GO --------------------------  
    CREATE TABLE Table2  
        (  
          Table2Id INT IDENTITY(1, 1) ,  
          Table1Id INT ,  
          NAME VARCHAR(20) ,  
          TheDate SMALLDATETIME ,  
          CONSTRAINT pk_Table2 PRIMARY KEY ( Table2Id ) ,  
          CONSTRAINT fk_Table2_Table1 FOREIGN KEY ( Table1Id ) REFERENCES Table1 ( Table1Id )  
        )  
    GO --------------------------  
    INSERT  INTO Table1  
            ( Name )  
    VALUES  ( 'Stack Overflow' )  
    GO --------------------------  
    INSERT  INTO Table1  
            ( Name )  
    VALUES  ( 'Expert Sex Change' )  
    GO --------------------------  
    INSERT  INTO Table1  
            ( Name )  
    VALUES  ( 'Code Project' )  
    GO --------------------------  
    INSERT  INTO dbo.Table2  
            ( Table1Id ,  
              NAME ,  
              TheDate   
            )  
    VALUES  ( 1 ,  
              'S1' ,  
              '11-01-2012'  
            )  
    GO --------------------------  
    INSERT  INTO dbo.Table2  
            ( Table1Id ,  
              NAME ,  
              TheDate   
            )  
    VALUES  ( 1 ,  
              'S2' ,  
              '11-01-2013'  
            )  
    GO --------------------------  
    INSERT  INTO dbo.Table2  
            ( Table1Id ,  
              NAME ,  
              TheDate   
            )  
    VALUES  ( 2 ,  
              'E1' ,  
              '10-01-2013'   
            )  

这是我的LINQ:

from t1 in Table1s 
     join t2 in Table2s.OrderByDescending(x => x.TheDate)
        on t1.Table1Id equals t2.Table1Id into tt
     from t2 in tt.DefaultIfEmpty()
     select new 
     {
        t1.Table1Id,
        t1.Name,
        t2.NAME,
        t2.TheDate
     }

这个回归:

  

Table1Id - Name - NAME - TheDate
  1 - 堆栈溢出 - S2 - 11/1/2013
  2 - 专家性别变化 - E1 - 10/1/2013
  1 - 堆栈溢出 - S1 - 11/1/2012
  3 - 代码项目 - null - null

我希望LINQ查询不返回第三行,就像旧日期值一样。

1 个答案:

答案 0 :(得分:0)

我想我明白了,答案是:

from    t1 in Table1s 
    join t2 in Table2s
    on t1.Table1Id equals t2.Table1Id 
    into tt
    from x in tt.DefaultIfEmpty()
    // where ... t1 && x ..
    orderby t1.Table1Id
    group x by new {t1.Table1Id,t1.Name} into g

    select new {
    Table1Id = g.Key.Table1Id,
    Name = g.Key.Name,
    TheDate = g.Max(c => c.TheDate)
    }