2

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

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 - 名称 - 名称 - TheDate
1 - 堆栈溢出 - S2 - 2013年 11 月 1 日
2 - 专家变性 - E1 - 2013
年 10 月 1 日 1 - 堆栈溢出 - S1 - 2012 年 11 月 1 日
3 - 代码项目 - 空- 无效的

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

4

1 回答 1

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)
    }
于 2013-11-13T08:58:13.427 回答