2017-03-23 5 views
1

こんにちは私は2つのテーブルからの列で最大カウントを取得するlinqクエリを書いています。私はSQLクエリを書くと、それは以下のとおりです。linqで集合関数を使用するにはどうすればいいですか?

select MAX(p.dispalyOrder) from NCT_Process p INNER JOIN NCT_Process_Settings s ON 
p.projectId =s.projectId AND p.level=s.level 

私はlinqに次のようにしました。

dbObject = (from c in entityObject.NCT_Process_Settings 
      join process in entityObject.NCT_Process on c.projectId equals process.projectId 
      join level in entityObject.NCT_Process on c.level equals level.level 
      select new settingsobject 
      { 
       MAX(p.dispalyOrder) to some propert of settingsobject 
      }).Tolist(); 

プロセステーブルから最大表示順序を取得する方法がわかりません。どんな助けもありがとう。ありがとうございました。

+0

NCT_ProcessテーブルとNCT_Process_Settingsテーブルの間に外部キーの関係がありますか。 – Vignesh

+0

ありがとうございます。いいえ... –

答えて

2

値を選択した後、クエリでMaxを呼び出します。また、複数の列を結合するには、一致させる列を持つ匿名クラスを作成する必要があります。

max = (from c in entityObject.NCT_Process_Settings 
     join p in entityObject.NCT_Process 
     on new { c.projectId, c.level } equals new { p.projectId, p.level } 
     select p.dispalyOrder).Max(); 

他の列がある場合は、集計もしたい場合は、一定の値でグループ化できます。

result = (from c in entityObject.NCT_Process_Settings 
      join p in entityObject.NCT_Process 
      on new { c.projectId, c.level } equals new { p.projectId, p.level } 
      group new{c,p} on 1 into grp 
      select new { 
       MaxDisplayOrder = grp.Max(x => x.p.dispalyOrder), 
       AvgOfSomething = grp.Avgerage(x => x.c.Something), 
       MinOfASum = grp.Min(x => x.p.SomeNumber + x.c.SomeOtherNumber) 
      }).Single(); 

Singleの使用を一定にすることによりグループは一行になりますので。

それとも、単に別の列でグループ化された最大表示順序を取得したい場合は、その後Keyはあなたがon後に置くものは何でもありとgrpは前値の集合であるということを、この

result = (from c in entityObject.NCT_Process_Settings 
      join p in entityObject.NCT_Process 
      on new { c.projectId, c.level } equals new { p.projectId, p.level } 
      group p.displayOrder on c.Id into grp 
      select new { 
       MaxDisplayOrder = grp.Max(), 
       Id = grp.Key 
      }).ToList(); 

注を行いますon。この場合は複数の結果がありますので、ToListを使用してクエリを実行してください。

+0

ありがとうございます。 displayorderで他のプロパティをどうやって使うことができますか? –

+0

他のプロパティが必要な場合は、 'group by'を行う必要があります。次に、それらを集約しているかどうか、または実際にグループ化してdisplayOrderのみを集計するかどうかによって異なります。 – juharr

+0

いくつかの例がありますか? –

関連する問題