我已经使用了两个LINQ查询来处理数据表并返回我想要的数据。实际上,该表具有以下列:C# - 多个LINQ查询到一个?
Group Animal Numbers
在单个组内可以有多个动物,并且可以将多个数字分配给单个动物。最初我想计算每个特定动物的数字范围,然后计算每个组的平均范围。输出是组号,然后是平均范围。
我有以下两个LINQ查询,可以工作,但是我的问题是,这可以合并为单个查询,还是因为它们是不同的操作,它们是否应该单独保持可读性和可测试性?
//Calculate range/delta for each number per animal
var query = from data in Data.AsEnumerable()
group data by new { animal = data.Field<string>("animal"), gp = data.Field<string>("group") }
into g
orderby g.Key.gp
select new
{
animal = g.Key.animal,
gp = g.Key.gp,
delta = g.Max(c => Convert.ToDouble(c.Field<string>("numbers")))
- g.Min(c => Convert.ToDouble(c.Field<string>("numbers")))
};
//calculate average range/delta per group
var temp = from q in query
group q by q.gp
into g
select new
{
gp = g.Key,
average = g.Average(c => c.delta)
};
谢谢。
其实他是迫使查询通过调用'AsEnumerable进行评估( )'在第一个查询中。 – 2011-03-22 15:09:26
'AsEnumerable'不强制查询评估。 –
neontapir
2011-03-22 15:13:19
您链接到的文章中备注部分的最后一句很重要。当然,调用'AsEnumerable()'并不是直接枚举'Data'实体。但是,它确实影响使用“组”的实现,表 vs IEnumerable 。这可能会对最终评估时生成的SQL产生巨大影响。例如,在服务器端不会评估“where”。所有实体都将被检索,并且使用Linq-to-Objects来完成“where”。 –
2011-03-22 16:09:34