SqlServer表包含刻录的时间和小时数,供应商的材料成本
用户决定他希望看到总计数 和 的列值,即他希望总计返回 - 任意columns_FK过滤器值的X个月份,或 X个周数。
例如他希望总成本,小时数, Vendor = Nike 或ProjectX,从特定日期开始(1)月,(3)周或2个月。所以,我试图根据参数化的Linq查询得到总数。
问题:
另外,我应该针对几个月和几周编写单独的查询,并为每个列分别查询(用户选择的列值,作为genric val传递给我)?
// I tried this... but just stuck
DateTime now = DateTime.Now;
Int goBack = passedinGoingBack; // amount of units to go back
var backUnits = obj.GetType().GetProperty(name); // tried getting month or week??
var getRows = table.AsEnumerable()
var columnName = passedInColumnName;
var filter = passedInValue;
.Where(r => r.Field<DateTime>(columnName).Year == now.Year
&& r.Field<DateTime>(columnName).Month == now.Month);
答案 0 :(得分:5)
这个问题有点基于意见。你可以用任何方便的方式做到这一点。这就是我如何做到这一点。
首先:您可以使用cat /proc/mounts | grep ^cgroup
LINQ函数根据给定的求和规则获取总数。
Sum
第二次:我会对每周和每月的总数进行单独查询,因为&#39;不同实体值的总和,可以有不同的逻辑。
但是,我会像这样为我做一个帮助功能:
var monthlyRows = table.AsEnumerable()
.Where(r => r.Field<DateTime>("ColumnName").Year == now.Year
&& r.Field<DateTime>("ColumnName").Month == now.Month);
var monthlyTotalForCost = monthlyRows.Sum(r => r.Field<decimal>("CostColumn"));
var monthlyTotalForHours = monthlyRows.Sum(r => r.Field<decimal>("HoursColumn"));
var weeklyRows = table.AsEnumerable()
.Where(r => r.Field<DateTime>("ColumnName").Year == now.Year
&& r.Field<DateTime>("ColumnName").Week == now.Week);
var weeklyTotalForCost = monthlyRows.Sum(r => r.Field<decimal>("CostColumn"));
var weeklyTotalForHours = monthlyRows.Sum(r => r.Field<decimal>("HoursColumn"));
更新:
过滤:您可以使用public static class TableLinqHelper
{
public static SumOfTableColumn<T>(this IEnumerable<DataRow> rows, string columnName)
{
return rows.Sum(r => r.Field<T>(columnName));
}
public static DateTime GetDate(this DataRow row)
{
return row.Field<DateTime>("DateColumn");
}
public static GetTotalForCost(this IEnumerable<DataRow> row)
{
return SumOfTableColumn<decimal>(row, "CostColumn");
}
public static GetTotalForHours(this IEnumerable<DataRow> row)
{
return SumOfTableColumn<double>(row, "HoursColumn");
}
}
var monthlyRows = table.AsEnumerable()
.Where(r => r.GetTime().Year == now.Year
&& r.GetTime().Month == now.Month);
var weeklyRows = table.AsEnumerable()
.Where(r => r.GetTime().Year == now.Year
&& r.GetTime().Week == now.Week);
var monthlyTotalForCost = monthlyRows.GetTotalForCost();
var monthlyTotalForHours = monthlyRows.GetTotalForHours();
var weeklyTotalForCost = weeklyRows.GetTotalForCost();
var weeklyTotalForHours = weeklyRows.GetTotalForHours();
LINQ过滤结果。
Where
几个星期和几周:您可以更改DateTime的条件。
Dictionary<string, object> Filters = new Dictionary<string, object>();
Filters.Add("VendorColumn", "Nike");
Filters.Add("Hours", 7.0);
foreach (var filter in Filters)
{
monthlyRows = monthlyRows.Where(r => // ...);
}
它将显示最后4个月的结果。
LINQ为数据操作提供了非常方便灵活的工具。这完全取决于你的幻想。