1

.Date次のクエリで、エンティティへの linq が演算子を認識していないというエラーが表示されます。

var data = from p in page_loads
           join f in sites
           on p.site_id equals f.id
           join tr in test_runs
           on p.test_run_id equals tr.id
           where f.id == 17
           group p by  p.created_at.Date into g
           select new { time = g.Average(t => t.time), created_at = g.Key };

注: created_atNOT NULLデータベースにあります。これを指摘しているのは、created_at が null 可能ではなく、エンティティへの linq に問題があることを知っているからです。しかし、この問題を修正する方法がわかりません。

編集:

[EdmScalarProperty(EntityKeyProperty = false, IsNullable = false)]
    [DataMember]
    public DateTime created_at { get; set; }
4

2 に答える 2

4

あなたが望むかもしれないように聞こえますSqlFunctions.DatePart

group p by SqlFunctions.DatePart("day", p.created_at) into g
于 2012-06-20T19:05:41.780 に答える
0

DateTime(年/月/日の組み合わせごとに新しい一意の匿名オブジェクトを作成する)の他のフィールドでグループ化できlet、クエリを簡素化するために使用する必要があります。

var data = from p in x
       join f in sites
       on p.site_id equals f.id
       join tr in test_runs
       on p.test_run_id equals tr.id           
       where f.id == 17
       let date = p.created_at
       group p by new { y = date.Year, m = date.Month, d = date.Day} into g
       select new { time = g.Average(t => t.time), created_at = g.Key };

最終的なプロジェクションを匿名型にしない場合は、3 つの匿名値をコンストラクターに渡すcreated_atことで、group-by 匿名型を に戻すことができます。DateTimeDateTime

を使用する別の SO の質問への回答には、他の解決策が示されていますEntityFunctions.TruncateTime

于 2012-06-20T23:40:15.620 に答える