1

次の表があります。

ここに画像の説明を入力

そして、次のデータ:

ここに画像の説明を入力

結果をフィルタリングして、それぞれから最新の行のみを取得するにはどうすればよいですかomraade_id(降順でソートtimestamp)。

この場合、id: の行10101005

--

@lazyberezovsky の回答から、次の式を作成しました。

dbConnection = new ElecEntities();

            var query = from data in dbConnection.Valgdata
            orderby data.timestamp descending
            group data by data.omraade_id into g
            select g.FirstOrDefault();

            return query.ToList();

ID が 3 と 4 の 2 つの行が返されます。これらは、データベースの最初の 2 つの行であり、タイムスタンプが最も小さい行でもあります。理由はありますか?

4

5 に答える 5

2
var query = dbConnection.Valgdata
                        .GroupBy(x => x.omraade_id)
                        .Select(g => g
                             .OrderByDescending(x => x.timestamp)
                             .FirstOrDefault());
于 2012-11-12T14:12:32.770 に答える
1

私はEFの経験がないので、SQL風のlinqだけがここで機能するかどうかはわかりません。プレーンなC#っぽい:

var query = dbConnection.Valgdata.GroupBy(u => u.omraade_id)
      .Select(x => x.FirstOrDefault(y => x.Max(p => p.timestamp) == y.timestamp));
于 2012-11-12T14:45:20.737 に答える
0

すべてのアイテムにフィルターをかけました。すべてのアイテムではなく、完全なクエリ結果に適用する必要があります。

以下は更新されたクエリです。

 var query = (from data in dbConnection.Valgdata
        orderby data.timestamp descending
        group data by data.omraade_id into g
        select g).FirstOrDefault();
于 2012-11-12T14:05:45.440 に答える
0
var query = from v in dbConnection.Valgdata
            orderby v.timestamp descending
            group v by v.omraade_id into g
            select g.First();

これにより、各 omraade_id の最大タイムスタンプを持つレコードのみが返されます。

上記のUPDATEクエリは問題なく機能します (少なくとも MS SQL Linq プロバイダーの場合)。また、行う必要はありませんFirstOrDefault。omraade_id がグループ化されている場合、少なくとも 1 つの行が存在することは間違いありません。

var query = from v in dbConnection.Valgdata
            group v by v.omraade_id into g
            select g.OrderByDesc(x => x.timestamp).First();
于 2012-11-12T13:46:17.387 に答える
0

これはこれまでの私の解決策です:

var data = dbConnection.Valgdata.Where(x => x.godkendt == false).ToList();
var dataGrouped = data.GroupBy(x => x.omraade_id).ToList();

List<Valgdata> list = new List<Valgdata>();

 foreach (var grpdata in dataGrouped)
            {
                var dataGroup = grpdata.OrderByDescending(x => x.timestamp).ToList();
                list.Add(dataGroup.FirstOrDefault());
            }
return list;

それが最も効果的かどうかはわかりませんが、うまくいきます。

于 2012-11-12T14:36:20.407 に答える