2012-02-13 49 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