我已經使用了兩個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