2017-01-05 8 views
0

のint型の値を取得し、一つに2つの問合せをマージI以下のLINQのために、SQLがGroupは、文字列値(例では、その結果

var group = "T"; 
var categoryQuery = from m 
        in ctx.Material 
        where m.Group == group 
        select m; 

var maxValue = from c 
       in categoryQuery 
       where c.Order == categoryQuery.Select(o => o.Order).Max() 
       select c.Order; 

問い合わせを持っている:「T」は、 "S"、 "R")、Orderはint値です。私が達成したいのは、特定のGroup値でフィルタリングされた結果セットの行から、最高のOrder int値を取得することです。最終的には、コードの他の場所で比較するために最大値を使用したいが、maxValue IQueryableオブジェクトから値にアクセスするのに問題がある。

のでcategoryQueryセットからのサンプルは、次のようになります。第二maxValueクエリで

Id  Group Order 
----- ----- ----- 
100 T  0 
101 T  1 
102 T  2 
103 T  3 

ので、私は3をしたいと思い、それがTの全てのうち最大Order値であるためGroupの値。

最初の質問:maxValueのint値にはどうすればアクセスできますか?

2番目の質問:クエリを1つのクエリに単純化するにはどうすればよいですか?

はそれが降順 Order、によって順序のように単純に思える

+0

それは最終的に1つのクエリになります。生成されたクエリを見ましたか? [datacontext.log](https://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.log(v = vs.110).aspx) –

+0

あなたの 'maxValue'クエリはちょうど行く0回以上繰り返される 'categoryQuery'中の最大' Order'のコレクションになるようにします。あなたは正確に何をしようとしていますか?いくつかのサンプルデータと得たい結果を表示できますか? – juharr

+0

質問をより明確にするためのサンプルデータを追加しました。 – ratman

答えて

0

ありがとう、その後、最初のアイテムを取る:

var group = "T"; 
var maxValue = (from m 
       in ctx.Material 
       where m.Group == group 
       orderby m.Order descending 
       select m).FirstOrDefault();