我正在寻找一种使用指定值访问变量列的方法。我有一个与我的SQL数据库1:1匹配的数据结构:
class Message
{
int MessageId;
string MessageType;
/* more fields */
double? Metric1;
double? Metric2;
/* cont'd */
double? Metric10;
/* database computed values */
int Year;
int Month;
int Day;
}
如何使用LINQ to SQL,根据变量的值对特定的“Metric n ”字段进行聚合(Sum,Average)?
示例:
/* DataContext Messages; */
int metric = 2;
var results = Messages
.GroupBy(m => new { m.Year, m.Month })
.Select(g => new {
Year = g.Key.Year,
Metric = g.Sum(m => m.MetricN) /* Here, MetricN should reflect the
value of (int metric) ("Metric" + metric) */
});
要求:
我知道将度量标准放在一个单独的表中(使用列(MessageID,Metric和Value)可以简化请求,但这是我必须使用的数据结构。
我唯一能够手写我的SQL请求的解决方案吗?
答案 0 :(得分:1)
研究使用Dynamic LINQ。它允许您使用字符串表达式而不是Lambda表达式。
最终会看起来像这样:
var results = Messages
.GroupBy(m => new { m.Year, m.Month })
.Select("new (Key.Year as Year, Sum(Metric1) as Metric)");
你只需要在查询之外生成选择表达式字符串,但是你想要这样做。
如果Nuget上的动态LINQ有一个版本:https://www.nuget.org/packages/System.Linq.Dynamic.Library/