0

私は自分の問題の答えを見つけようとしましたが、できませんでした。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()

お願いします、これを手伝ってくれませんか...

4

1 に答える 1

2
from r in Records
group r by new { WorkerId = r.WorkerId, Date = r.DateTime.Value.Date } into g
orderby g.Key.WorkerId
select g.OrderBy(e => e.DateTime).First()

更新:orderby句を追加g.OrderBy()し、グループ内の任意の要素ではなく、毎日の最初のレコードの選択を強制するために使用します。

于 2012-08-30T16:24:44.707 に答える