我从服务中获取数据表。我正在使用linq来计算总和新列。我想要数据表中的所有coumns以及在linq中计算的新列。
问题是数据表中的列不固定。如何动态添加linq的select子句中的列。
以下是代码段:
DataTable dt = ds.Tables[0];
var orderCtr =
from o in dt.AsEnumerable()
where o.Field<string>(Constants.GENDER_NAME) != "Unknown"
group o by new
{
odr_id = o.Field<int>(Constants.ORDER_ID),
//NEED TO ADD COLUMNS DYNAMICALLY HERE. MEANS IF THEY ARE IN DATATABLE.
}
into g
select new
{
//NEED TO ADD COLUMNS DYNAMICALLY HERE. MEANS IF THEY ARE IN DATATABLE.
odr_id = g.Key.odr_id,
ac_gr_imp = g.Sum(r => r.Field<long>(Constants.GENDER_IMPRESSION)),
ac_gr_clk = g.Sum(r => r.Field<long>(Constants.GENDER_CLICK)),
Ctr = (double)g.Sum(r => r.Field<long>(Constants.GENDER_IMPRESSION)) / g.Sum(r => r.Field<long>(Constants.GENDER_CLICK)),
};
答案 0 :(得分:0)
您可能对Dynamic LINQ库感兴趣。动态LINQ允许您通过构建字符串来指定查询或部分查询。
Scott Guthrie在2008年(http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx)对它进行了描述,如果您使用.NET 4(http://www.nuget.org/packages/System.Linq.Dynamic),还会有一个NuGet包。