1

この種のレコードを含むStorageという名前のテーブルがあるとします。

Item_Id      |  Date            |   Price
1            |  01/01/2011      |   50
1            |  03/26/2012      |   25  
2            |  04/21/2012      |   20
3            |  08/02/2012      |   15
3            |  09/02/2012      |   13
4            |  10/02/2012      |   18

linq to sqlを使用して、最新の日付が関連付けられたItem_Id(この場合は「4」)を取得したいと思います。

私はこの表現を使用しています

var lastDate= Storage
                    .GroupBy(s => s.Item_Id)
                    .Select(grp => new {
                      grp.Key,
                      LastDate = grp.OrderByDescending(
                             x => x.Date).First()
                    }).ToList();

各item_Idの最新の日付のリストを取得しています。したがって、次のステップはそれらすべての中で最高のものを取得することですが、私はそこで立ち往生しています。

実際には、最終的にはクエリ内のItem_Idの一部をスキップする必要がありますが、Selectの前にwhere(s => s.Item.Id {とここでは、次のような式を追加できると思います。それが私が渡すリストの中にあるかどうかをチェックします)。

ヒントをいただければ幸いです。

ありがとう

4

2 に答える 2

2

これはあなたが必要とするもののために働きますか?

var highestDateID = Storage.OrderByDescending(x => x.Date).Select(x => x.Item_Id).FirstOrDefault();
于 2012-08-01T23:45:29.183 に答える
1

なぜだめですか

var lastDateId = Storage
  .GroupBy(s => s.Item_Id)   
  .Select(grp => new { Id = grp.Key, LastDate = grp.Max(x=>x.Date) })
  .OrderBy(o=>o.LastDate).Take(1).Id;

あるいは

var lastDateId = Storage.OrderByDescending(o=>o.LastDate).Take(1).Id;

完全な記録が必要な場合

var record = Storage
  .Where(w=>w.Id == Storage.OrderByDescending(o=>o.LastDate).Take(1).Id)
  .First();
于 2012-08-01T23:51:27.077 に答える