2012-02-13 62 views
0

我有一個名爲jobs的表。每項工作都會發布到某個站點,以便創建一條垂直記錄,並顯示發佈日期和發佈到的網站。從垂直表格和所有垂直線獲取最大記錄

這裏是我的數據的一個基本的例子

喬布斯:

  • jobid
  • positiontitle

發佈:

  • dateposted
  • active
  • jobid
  • sitename

所以我需要三個這樣的數據在我的結果集。位置標題,最大日期時間以及來自張貼表格的所有網站名單,其中活動是真實的。有誰知道我怎麼可以做到這一點在linq到一個查詢的SQL?

回答

1

像這樣的東西可能會訣竅。

與結果的對象是這樣的:

public class MyObject 
{ 
    public string positiontitle { get; set; } 
    public DateTime? maxDatePosted { get; set; } 
    public IEnumerable<string> SiteNames { get; set; } 
} 

datetime需要是nullable datetime的爲它工作。然後這樣的查詢:

var result=(
     from jobs in db.Jobs 
     select new MyObject() 
     { 
      positiontitle=jobs.positiontitle, 
      maxDatePosted=db.Posted 
          .Where(p =>p.jobid==jobs.jobid) 
          .Max(p =>p.dateposted), 
      SiteNames=db.Posted 
         .Where (p =>p.jobid==jobs.jobid && p.active==true) 
         .Select (p =>p.siteName) 
     } 
    ).ToList(); 

如果你想最大日期爲活動的日期發佈以及。然後是這樣的:

var result=(
     from jobs in db.Jobs 
     select new MyObject() 
     { 
      positiontitle=jobs.positiontitle, 
      maxDatePosted=db.Posted 
          .Where(p =>p.jobid==jobs.jobid && p.active==true) 
          .Max(p =>p.dateposted), 
      SiteNames=db.Posted 
         .Where (p =>p.jobid==jobs.jobid && p.active==true) 
         .Select (p =>p.siteName) 
     } 
    ).ToList(); 

其中db是LINQ數據庫上下文

+0

非常感謝你。還有一個問題。有時候有沒有發佈的作業,所以maxDatePosted字段爲空。當我在Linqpad程序中運行示例時,出現以下錯誤 - 「無法將null值分配給System.DateTime類型爲非空值類型的成員。」當我運行生成的sql時,我發現它的maxDatePosted是null。任何想法如何在你的例子中設置該字段爲可空的日期時間?再次感謝! – 2012-02-13 14:10:06

+0

我更新了答案.. – Arion 2012-02-13 14:21:45

+0

很好,再次感謝! – 2012-02-13 14:49:07