2016-10-25 9 views
2

私は、各エントリにKeyとバージョンがある汎用オブジェクトテーブルを持っています。だから、どのように私は、各オブジェクトの最新バージョン、すなわちリターンオブジェクト1のバージョン3と対象物2のバージョン2を返すように要求することができEntity LinqからSQLへの個別リストの取得方法

Object 1, version 1 
Object 1, version 2 
Object 1, version 3 
Object 2, version 1 
Object 2, version 2 

を持っているのでしょうか?私は、これは、これまで

var dbObjects = _objectStoreRepository.GetDataObjects().OrderByDescending(d => d.Version).Where(d => 
        d.ObjectKey.ToLower().Contains(objectKey) && 
        ((d.Status.ToLower() == request.Status.ToLower()) || string.IsNullOrEmpty(request.Status)) && 
        d.CreatedAt <= request.AsAtTime).ToList(); 

私のクエリである私は、各オブジェクトの最も高いバージョン番号をしたい、彼らは別のバージョンがあり、オブジェクトが一致しないよう明確なクエリを使用する方法

をうまくすることはできませんしかし、これだけではなく、最も高いバージョンで、一致する各オブジェクトのすべてのバージョンを返します

答えて

0

あなたが選択して.GroupByを使用したいと思うでしょう:

var results = _objectStoreRepository 
    .GetDataObjects() 
    .Where(d 
     => d.ObjectKey.ToLower().Contains(objectKey) 
     && ((d.Status.ToLower() == request.Status.ToLower()) || string.IsNullOrEmpty(request.Status)) 
     && d.CreatedAt <= request.AsAtTime) 
    .GroupBy(o => o.ObjectKey) 
    .Select(g => g.OrderBy(x => x.Version).LastOrDefault()) 
    .ToList(); 

最初に結果を一般的な「キー」でグループ化し、それらをグループ化すると、そのグループ内の結果をバージョン順に並べ、最後またはデフォルトを取る。正確なデータに合わせてSelect/OrderByを変更する必要があるかもしれません。

関連する問題