2012-02-13 136 views
0

私はjobsというテーブルを1つ持っています。各ジョブは特定のサイトに投稿され、投稿された日付とそのサイトに投稿された垂直レコードが作成されます。垂直テーブルとすべての垂直から最大レコードを取得

  • jobid

    はここ

    ジョブズ私のデータの基本的な例です。

  • positiontitle

投稿者:

  • dateposted
  • active
  • jobid
  • sitename

私の結果セットには3つのデータが必要です。位置タイトル、最大日付ポスト、およびアクティブである投稿テーブルからのすべてのサイト名のリスト。誰も私はlinqでこれを行うことができる方法を知っている1つのクエリで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(); 

アクティブなものについても最大の日付ポストが必要な場合。そして、このような何か:DBはLINQのデータベースコンテキスト

+0

はどうもありがとうございましれる

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(); 

。しかしもう1つの質問。投稿されていないジョブがあることがあるので、maxDatePostedフィールドはnullです。 Linqpadプログラムであなたのサンプルを実行すると、次のエラーが表示されます。「ヌル値は、null値のない値型のSystem.DateTime型のメンバに割り当てることができません。私が生成されたSQLを実行すると、それはnullであるmaxDatePostedだと分かります。あなたの例でnullable datetimeとしてそのフィールドを設定する方法はありますか?再度、感謝します! –

+0

私は答えを更新しました.. – Arion

+0

素晴らしい、ありがとう! –