私は自分の問題の答えを見つけようとしましたが、できませんでした。ID、WorkerID、Function(int)、および DateTime を含むテーブルがあります。各ワーカーには、1 日ごとに複数のレコードがあります。すべてのワーカーについて、毎日最初のレコードのみを取得する必要があります。このクエリは、私が望んでいた結果を提供します。
SELECT WorkerID, MIN(DateTime) AS DateTime
FROM Records
GROUP BY WorkerID, LEFT(DateTime, 10)
ORDER BY WorkerID
しかし、すべての列 (ID、WorkerID、Function、および DateTime) を選択したいと考えています。どうやってやるの?また、ASP.NET MVC3 アプリケーションにはこのクエリが必要なので、誰かがこれを LINQ で書いて、そのクエリを IEnumerable(Record) または IQuerible(Record) に変換する方法を説明してくれれば、とてもありがたいです。前もってありがとう、私を救ってくれることを願っています。
編集: LINQ クエリは機能しましたが、テーブルではなく多くのビューを使用しているため、パフォーマンスに関して多くの問題がありました。今度はテーブルに切り替え、テーブルで直接クエリを実行したいと考えています。構造は同じです。WorkerID の代わりに、同じ ETAG があります。しかし、私は今問題を抱えています。上記の SQL クエリでは、テーブルで約 50,000 件の結果が得られますが、これは正しいですが、LINQ クエリでは 9,000 件しか返されないため、何かが間違っています。クエリは次のとおりです。
from d in Records
group d by new { d.ETAG, Date = d.DateTime.Value.Year + d.DateTime.Value.Month + d.DateTime.Value.Day } into g
orderby g.Key.ETAG
select g.OrderBy(e => e.DateTime).FirstOrDefault()
お願いします、これを手伝ってくれませんか...