0

いくつかの異なる方法を試しましたが、生成された出力クエリには感心しませんでした。それはとても非効率的なようです。効率的である必要があり、すべての行をアプリレイヤーに戻すべきではありません

select year(datetaken) as yr,
       month(datetaken) as mth,
       day(datetaken) as dy,
       count(*) as totalpics
from photos
where photos.dateTaken <= @cutoffdate
group by year(datetaken), month(datetaken), day(datetaken)
order by yr asc, mth asc, dy asc

LINQクエリ:

var query = ctx.Photos.Where(p => p.DateTaken <= maxCutOffDate)
    .GroupBy(p => new { p.DateTaken.Year, p.DateTaken.Month, p.DateTaken.Day })
    .Select(grp => grp);
var results = query.ToList();
4

2 に答える 2

3

グループ化キー(grp.Key)のみを選択します。

var query = ctx.Photos.Where(p => p.DateTaken <= maxCutOffDate)
    .GroupBy(p => new { p.DateTaken.Year, p.DateTaken.Month, p.DateTaken.Day })
    .Select(grp => grp.Key);
var results = query.ToList();

編集

または、counttotalpicsのを含む:

var query = ctx.Photos.Where(p => p.DateTaken <= maxCutOffDate)
    .GroupBy(p => new { p.DateTaken.Year, p.DateTaken.Month, p.DateTaken.Day })
    .Select(grp => new
    {
        Date = grp.Key,
        TotalPics = grp.Count()
    });
var results = query.ToList();
于 2012-12-29T16:27:58.027 に答える
1

を介してキープロパティにアクセスし、を介しgrp.Keyてカウントにアクセスできますgrp.Count()

var query = ctx.Photos.Where(p => p.DateTaken <= maxCutOffDate)
    .GroupBy(p => new { p.DateTaken.Year, p.DateTaken.Month, p.DateTaken.Day })
    .Select(grp => new 
                   { 
                       grp.Key.Year,
                       grp.Key.Month,
                       grp.Key.Day,
                       Count = grp.Count()
                   });
var results = query.ToList();
于 2012-12-29T18:18:33.317 に答える