Linqを使用して、指定した日付に最も近いレコードを選択するにはどうすればよいですか?これは、日付、製品ID、ロケーションID、および残高を持つトランザクションテーブル用です。これらの要件を考えるとLinqは日付に最も近いレコードを選択します
:いくつかは、指定された日
- は、その日の最後のトランザクションを選択し
- を表示指定日に何もなかった場合は、最も近い先行トランザクションを選択各倉庫には個別の取引があります
- 複数の商品の残高を表示する - 各商品には個別の取引があります
表データ:( - >倉庫 - >日付製品)または同様の
// code
Id, TransDateTime, ProductId, WarehouseId, Balance
1, 1-Jan-2011 00:00, 1, 1, 100
2, 1-Jan-2011 00:00, 1, 2, 10
3, 2-Jan-2011 00:00, 1, 1, 150
4, 3-Jan-2011 00:00, 1, 2, 25
5, 3-Jan-2011 00:00, 2, 1, 333
6, 7-Jan-2011 00:00, 1, 1, 149
7, 7-Jan-2011 01:00, 1, 2, 30
8, 7-Jan-2011 02:00, 1, 2, 35
テストの日付と出力は
Date: 1-Jan would output:
1, 1-Jan-2011 00:00, 1, 1, 100
2, 1-Jan-2011 00:00, 1, 2, 10
Date: 3-Jan would output:
3, 2-Jan-2011 00:00, 1, 1, 150
4, 3-Jan-2011 00:00, 1, 2, 25
5, 3-Jan-2011 00:00, 2, 1, 333
// product 1, warehouse 1 wasn't sold on the 3rd
// so the row from 2-Jan is returned
Date: 7-Jan would output:
5, 3-Jan-2011 00:00, 2, 1, 333
6, 7-Jan-2011 00:00, 1, 1, 149
9, 7-Jan-2011 02:00, 1, 2, 35
// product 2, warehouse 1 wasn't sold on the 7th
// so the row from 3-Jan is returned
// product 1, warehouse 2 was sold twice on the 7th
// so the later one is used
私はグループのグループ化を必要とするようになるだろうと思います。それは私のlinq能力を超えて!
+1これまで簡単に修正されたエラーが1つだけありました。「メソッド 'First'は最終的なクエリ操作としてのみ使用できます。このインスタンスの代わりに 'FirstOrDefault'メソッドを使用することを検討してください。 ' –
@JK、それはlinq-to-sqlの仕様です。私はlinq-to-objectsでテストしていました。 – Snowbear