2017-03-16 5 views
0

エンティティフレームワークを使用している警察に関する統計情報を提供する関数をプログラムに実装する必要があります。画像はデータベースの構造を示しています。また、7つのマージするテーブルとカウントがありますC#エンティティフレームワークLINQ - レポートの作成

Users.Where(w => w.Region == 1321) 
    .Select(s => s.Id) 
    .Join(Added, x => x, y => y.UserId, (x, y) => new 
    { 
     UserId = x, 
     PersonId = y.PersonId, 
     Date = y.AddDate 
    }) 
    .GroupJoin(Status, x => x.PersonId, y => y.PersonId, (x, y) => new 
    { 
     PersonPreviouslyConvicted = y.PersonPreviouslyConvicted, 
     PersonBum = y.PersonBum, 
     PersonJobless = y.Jobless, 

    }).Join(Photos...).Join(More tables...) 

enter image description here

を私の問題は、私は適切に複数の参加を整理することができないということです人数、個数、総数。すべてのテーブルで、外部キーはPersonIdです。 ReportContainer型のオブジェクトのリストをラップする必要があるすべての結果。

public class ReportContainer 
{ 
    public string Name { get; set; } // City or District name 
    public int? SevenDays { get; set; } // Count of the 7 days by column Added.AddDate 
    public int? ThirtyDays { get; set; } // Count of the 30 days by column Added.AddDate 
    public int? Bum { get; set; } //Count Bum 
    public int? Photography { get; set; } //Count Photos 
    public int? PreviouslyConvicted { get; set; } //Count PreviouslyConvicted 
    public int? Jobless { get; set; } //Count Jobless 

} 
+0

私が考え、次のようにReportContainerこれにSQLクエリを使用することをお勧めします。データが大きくなると効率的になります。 また、ef用に最適化するために単一のクエリを中断することもできます。ベンチマークと最適化が最良の方法です2 – Eldho

答えて

0

私は7日と30日

var firstdate = Added.Where(a => a.Id == 1).Select(d => d.Date); 

をsubstractして、ユーザーに参加することができますので、私はfirstdateになるだろう、追加、ステータスや写真

Users.Where(w => w.Region == 1321) 
    .Select(s => s.Id) 
    .Join(Added, a => a, s => s.UserId , (a, s)=> new 
    { 
     UserId = a.UserId, 
     PersonId = s.PersonId, 
     SevenDays = s.AddDate >= firstdate.AddDays(-7), 
     ThirtyDays = s.AddDate >= firstdate.AddDays(-30), 
    }) 
    .Join(Status, s => s.PersonId, y => y.PersonId, (s, y)=> new 
    { 
     PersonId = s.PersonId, 
     Bum = y.Bum, 
     Jobless = y.Jobless, 
     PreviouslyConvicted = y.PreviouslyConvicted 
    }) 
    .Join(Photos, p => p.PersonId, y => y.PersonId, (p, y) => new 
    { 
     PersonId = p.PersonId, 
     WithPhotos= y.Photo 
    }) 
関連する問題