0

次のことを行うには、LINQ クエリをどのように記述しますか?

次のようなスキーマを持つデータベース テーブルがあります。

ID - Int  
Time - DateTime  
RecordType - Int  
Msg - String  

「RecordType」ごとに最新の (「Time」フィールドを使用して) レコードを取得したい

もう 1 つの制限は、int 配列に含まれる特定の RecordTypes のみに関心があることです。

クエリの結果は、RecordType ごとに 1 つのレコード (このタイプの最新のレコード) になります。

4

2 に答える 2

2
var results = source.GroupBy(x => x.RecordType)
                    .Where(g => myRecordTypes.Contains(g.Key))
                    .Select(g => g.OrderByDescending(x => x.Time).First())
                    .ToList();

myRecordTypes結果として取得したい s のint[]セットです。RecordType

resultList<Record>1個につき1個付きとなりますRecordType

Dictionary<int, Recort>たとえば、RecordType次のように変更できます。

var results = source.GroupBy(x => x.RecordType)
                    .Where(g => myRecordTypes.Contains(g.Key))
                    .Select(g => new { g.Key, item = g.OrderByDescending(x => x.Time).First() })
                    .ToDictionary(x => x.Key, x => x.item);
于 2013-09-12T19:53:12.667 に答える
0

それらをレコードの種類でグループ化し、必要なものをフィルターで除外してから、そのグループ内の最初の項目を時間順に選択します。

int[] recordTypes = GetRecordTypes();
var query = context.Table.GroupBy(item => item.RecordType)
    .Where(group => recordTypes.Contains(group.Key))
    .Select(group => group.OrderBy(item => item.Time).FirstOrDefault());
于 2013-09-12T19:54:33.810 に答える