45

日時フィールドを持つテーブルがあります。月/年の組み合わせと、その月/年に表示されるレコードの数によってグループ化された結果セットを取得したいと考えています。これはLINQでどのように行うことができますか?

私が把握できた最も近いものはTSQLにあります:

select substring(mo,charindex(mo,'/'),50) from (
select mo=convert(varchar(2),month(created)) + '/' + convert(varchar(4), year(created)) 
 ,qty=count(convert(varchar(2),month(created)) + '/' + convert(varchar(4), year(created)))
from posts 
group by convert(varchar(2),month(created)) + '/' + convert(varchar(4), year(created))
) a
order by substring(mo,charindex(mo,'/')+1,50)

しかし、それがうまくいくとは言えません...

4

5 に答える 5

79
var grouped = from p in posts
     group p by new { month = p.Create.Month,year= p.Create.Year } into d
     select new { dt = string.Format("{0}/{1}",d.Key.month,d.Key.year), count = d.Count() };

LINQで使用できる DateTime 関数の一覧を次に示します。これが機能するには、複数列のグループ化についても理解する必要があります

降順

var grouped = (from p in posts 
  group p by new { month = p.Create.Month,year= p.Create.Year } into d 
  select new { dt = string.Format("{0}/{1}",d.Key.month,d.Key.year), count = d.Count()}).OrderByDescending (g => g.dt);
于 2009-04-18T04:58:21.607 に答える
26

これは、ラムダ式を使用して同じことを達成しようとしている人向けです。

既にエンティティのコレクションがあり、各エンティティがそのプロパティの 1 つとして OrderDate を持っていると仮定します。

yourCollection
// This will return the list with the most recent date first.
.OrderByDescending(x => x.OrderDate)
.GroupBy(x => new {x.OrderDate.Year, x.OrderDate.Month})
// Bonus: You can use this on a drop down
.Select(x => new SelectListItem
        {
           Value = string.Format("{0}|{1}", x.Key.Year, x.Key.Month),
           Text = string.Format("{0}/{1} (Count: {2})", x.Key.Year, x.Key.Month, x.Count())
        })
.ToList();

SelectListItem のコレクションが必要ない場合は、select を次のように置き換えます。

.Select(x => string.Format("{0}/{1} (Count: {2})", x.Key.Year, x.Key.Month, x.Count()))
于 2015-04-03T01:50:13.557 に答える
7

このようにすることもできます

from o in yg
group o by o.OrderDate.ToString("MMM yyyy") into mg
select new { Month = mg.Key, Orders = mg }

あなたの結果は

{2014 年 1 月 25 日} {2015 年 2 月 15 日} など...

于 2014-11-18T15:07:25.523 に答える
1

このサイトには、ニーズを満たす例があります。

これは基本的な構文です:

from o in yg
group o by o.OrderDate.Month into mg
select new { Month = mg.Key, Orders = mg }
于 2009-04-18T04:41:01.853 に答える