C# 对基于构造函数的解决方案进行初始化。在使用示例中提供的原型和编辑构建项目时,我没有遇到任何问题。看起来它也可以很方便地清理代码。 class PrintJob : IEntity { public string UserName { get; se
对基于构造函数的解决方案进行初始化。在使用示例中提供的原型和编辑构建项目时,我没有遇到任何问题。看起来它也可以很方便地清理代码。C# 对基于构造函数的解决方案进行初始化。在使用示例中提供的原型和编辑构建项目时,我没有遇到任何问题。看起来它也可以很方便地清理代码。 class PrintJob : IEntity { public string UserName { get; se,c#,linq-to-entities,expression,entity-framework-4.1,ef4-code-only,C#,Linq To Entities,Expression,Entity Framework 4.1,Ef4 Code Only,对基于构造函数的解决方案进行初始化。在使用示例中提供的原型和编辑构建项目时,我没有遇到任何问题。看起来它也可以很方便地清理代码。 class PrintJob : IEntity { public string UserName { get; set; } public string Departmen { get; set; } public int PagesPrinted { get; set; } } class PrintJobReportItem {
class PrintJob : IEntity
{
public string UserName { get; set; }
public string Departmen { get; set; }
public int PagesPrinted { get; set; }
}
class PrintJobReportItem
{
public int TotalPagesPrinted { get; set; }
public int AveragePagesPrinted { get; set; }
public int PercentOfSinglePagePrintJobs { get; set; }
}
class PrintJobByUserReportItem : PrintJobReportItem
{
public string UserName { get; set; }
}
class PrintJobByDepartmenReportItem : PrintJobReportItem
{
public string DepartmentName { get; set; }
public int NumberOfUsers { get; set; }
}
var repo = new Repository(...);
var q1 = repo.GetQuery<PrintJob>()
.GroupBy(pj => pj.UserName)
.Select(g => new PrintJobByUserReportItem
{
#region this is PrintJobReportItem properties
TotalPagesPrinted = g.Sum(p => p.PagesPrinted),
AveragePagesPrinted = g.Average(p => p.PagesPrinted),
PercentOfSinglePagePrintJobs = g.Count(p => p.PagesPrinted == 1) / (g.Count(p => p.PagesPrinted) != 0 ? g.Count(p => p.PagesPrinted) : 1) * 100,
#endregion
UserName = g.Key
});
var q2 = repo.GetQuery<PrintJob>()
.GroupBy(pj => pj.Departmen)
.Select(g => new PrintJobByDepartmenReportItem
{
#region this is PrintJobReportItem properties
TotalPagesPrinted = g.Sum(p => p.PagesPrinted),
AveragePagesPrinted = g.Average(p => p.PagesPrinted),
PercentOfSinglePagePrintJobs = g.Count(p => p.PagesPrinted == 1) / (g.Count(p => p.PagesPrinted) != 0 ? g.Count(p => p.PagesPrinted) : 1) * 100,
#endregion
DepartmentName = g.Key,
NumberOfUsers = g.Select(u => u.UserName).Distinct().Count()
});
public static IQueryable<CLASSNAME> EXTENSIONNAME<TKey, TSource>(this IEnumerable<IGrouping<TKey, TSource>> source)
{
return from g in source
select new CLASSNAME
{
PrintJobReportItem = new PrintJobReportItem
{
TotalPagesPrinted = g.Sum(p => p.PagesPrinted),
AveragePagesPrinted = etc...,
PercentOfSinglePagePrintJobs = etc...,
},
GROUPING = g
};
}
var q1 = repo.GetQuery<PrintJob>()
.GroupBy(pj => pj.UserName)
.EXTENSIONNAME()
.Select(g => new PrintJobByDepartmenReportItem
{
PrintJobReportItem = g.PrintJobReportItem,
DepartmentName = g.GROUPING.Key,
NumberOfUsers = g.GROUPING.Select(u => u.UserName).Distinct().Count()
});
public PrintJobReportItem()
{
}
public PrintJobReportItem(IEnumerable<IGrouping<string, PrintJob>> g)
{
this.TotalPagesPrinted = g.Sum(i => i.GetEnumerator().Current.PagesPrinted);
this.AveragePagesPrinted = g.Average(i => i.GetEnumerator().Current.PagesPrinted);
this.PercentOfSinglePagePrintJobs = g.Count(i => i.GetEnumerator().Current.PagesPrinted == 1) * 100 / g.Count(i => i.GetEnumerator().Current.PagesPrinted > 1);
}
public PrintJobByDepartmentReportItem(IEnumerable<IGrouping<string, PrintJob>> g) : base(g)
{
this.DepartmentName = g.First().Key;
this.NumberOfUsers = g.Select(i => i.GetEnumerator().Current.UserName).Distinct().Count();
}
var q1 = repo.GetQuery<PrintJob>()
.GroupBy(pj => pj.UserName)
.Select(g => new PrintJobByUserReportItem(g));
var q2 = repo.GetQuery<PrintJob>()
.GroupBy(pj => pj.Department)
.Select(g => new PrintJobByDepartmentReportItem(g));