2016-04-03 8 views
2

私はユーザーに関連した項目のリストを持っています。注文したグループの最後のアイテムを取得

各アイテムには日付があります。たとえば、すべてのユーザー


私は(日付で)最後の項目を取得したいデータがある場合:

Id1, User1, 1.1.16 
Id2, User2, 2.1.16 
Id1, User1, 4.1.16 
Id4, User2, 3.1.16 
Id3, User1, 2.1.16 
Id4, User2, 5.1.16 

それはユーザーのそれぞれの(日付で)最後の項目を返す必要があります:

Id1 User1 4.1.16 
Id4 User2 5.1.16 

私のクエリは次のとおりです。

それは常にユーザーの最初の項目を取得するいくつかの理由
from sf in db.Items 
where ... 
group i by i.UserId into g 
select g.OrderByDescending(s => s.StartDate).FirstOrDefault(); 



すべてのグループとそのアイテムを印刷するとOKと表示され、
の最初のアイテムは各グループの最後のアイテムですが、クエリで返されません。

私は
g.ToList()を追加しようとしまし役立つ..didn't g.OrderByに変更しようとした...
は、どのように私はすべてのユーザーの最新アイテムを得ることができますか?

イムは
にクエリを変更する場合はそれが私がg.OrderByDescending(S => s.StartDate)

とよりを選択グラム
にi.UserIdで... グループに動作しますグループにループする最初の項目を取る
foreach(クエリのvar g)
{
var last = g.First();あなたは二つのプロパティを持つ匿名型のオブジェクトに各グループを投影し、その後グループを作った

var result = from sf in db.Items 
      where ... 
      group i by i.UserId into gr 
      select new 
      { 
       UserId = gr.Key 
       LatestItem = gr.OrderByDescending(s => s.StartDate) 
           .FirstOrDefault() 
      }; 


答えて

1

あなたはこのようなものが必要。最初のプロパティは、グループのキー、UserIdです。 2番目はこのユーザーのLatestItemです。

+0

残念ながら、私は同じリルートを取得しています。私はグループ全体を選択して、私がグループをループするときよりも、その最初のものを選択します。 foreach(var gr in resultQuesry)var last = gr.First(); –

関連する問題