在linq的group by子句中动态添加列

时间:2013-09-17 06:54:33

标签: linq datatable

我从服务中获取数据表。我正在使用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)),
                    };

1 个答案:

答案 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包。