1

次のMSSQLServerクエリを作成しましたが、それからlinqtoentitiesステートメントを作成するのに問題があります。

目標は、過去7日間のリードをデータベースから取得し、曜日ごとにグループ化して、1日あたりのリードをカウントすることです。

SELECT      DATEPART(day, DateCreated) AS Day, LEFT(DATENAME(dw, DateCreated), 3) AS DayOfWeek, COUNT(*) AS Count
FROM         dbo.[File]
WHERE     (DateCreated > GETDATE() - 7)
GROUP BY DATEPART(day, DateCreated), DATENAME(dw, DateCreated)
ORDER BY Day, DATENAME(dw, DateCreated)

結果の例は次のとおりです。

結果の例を含むリンクは次のとおりです。link

linqを使用してエンティティにこれを記述する方法の例についてのヘルプをいただければ幸いです。Vb(推奨)またはc#?

ありがとうございました

4

2 に答える 2

2

これを試して

var query =
    from f in File
    where f.DateCreated > DateTime.Now.AddDays(-7)
    group f by new { Day = f.DateCreated.Day, DayOfWeek = f.DateCreated.DayOfWeek } into g
    select new
    {
        Day = g.Key.Day,
        DayOfWeek = g.Key.DayOfWeek.ToString().Substring(0, 3),
        Count = g.Count()
    };

文化固有の名前が必要な場合は、次を使用できますDate.ToString("dddd", System.Globalization.CultureInfo.CreateSpecificCulture("en-US"))

var query =
    from f in File
    where f.DateCreated > DateTime.Now.AddDays(-7)
    group f by new { Day = f.DateCreated.Day, DayOfWeek = f.DateCreated.ToString("dddd", System.Globalization.CultureInfo.CreateSpecificCulture("en-US")) } into g
    select new
    {
        Day = g.Key.Day,
        DayOfWeek = g.Key.DayOfWeek.Substring(0, 3),
        Count = g.Count()
    };

更新: わかりました、私は VB の専門家ではありませんが、VB の場合は、次のようなものを試すことができます

    Dim query =
    From f In File
    Where f.DateCreated > DateTime.Now.AddDays(-7)
    Group f By Day = f.DateCreated.Day, DayOfWeek = f.DateCreated.DayOfWeek.ToString().Substring(0, 3)
    Into Group, Count = Count()
于 2012-11-21T19:59:57.567 に答える
1

Linq-to-SQL で日と曜日でグループ化するのではなく、日付でグループ化してからクエリの外で日付部分を抽出する方がよいでしょう (後で日付を処理してもクエリのパフォーマンスには影響しないため)。

var query = 
    (from f in Files 
        where EntityFunctions.AddDays(f.DateCreated, 7) >= DateTime.Today()
        group f by EntityFunctions.TruncateTime(f.DateCreated) into g
        select new { DateCreated = g.Key, Count = g.Count() })
    .ToList()  // materialize to switch from Linq-to-SQL to Linq-to-Objects
    .Select( g => new { 
                       Day = g.DateCreated.Day,, 
                       DayOfWeek = g.DateCreated.ToString("ddd"),
                       Count = g.Count
                       });
于 2012-11-21T20:01:50.993 に答える