我试图根据其组来获取表格的平均值,
from avgtbl1 in table1
group avgtbl1 by new
{
avgtbl1 .Prop1,
avgtbl1 .Prop2,
avgtbl1 .Prop3,
avgtbl1 .Prop4
} into tempavgtbl1
select new
{
Prop1= tempavgtbl1 .Key.Prop1,
Prop2= tempavgtbl1 .Key.Prop2,
Prop3= tempavgtbl1 .Key.Prop3,
Prop4= tempavgtbl1 .Key.Prop4,
prop5= tempavgtbl1 .Average(a => a.Prop4)
};
执行查询后,它给出了prop4的相同值,而不是prop4的基于prop1,prop2,prop3的平均值。我没有得到我错的地方。
|Prop1 | prop2 |prop3| prop4|
|1 | abc |123 | 20|
|1 | abc |123 | 24|
|2 | abc |123 | 20|
|2 | abc |123 | 24|
|3 | pqr | 123| 27|
|3 | pqr | 123| 29|
Expected Result
|Prop1 | prop2 |prop3| prop4|prop5|
|1 | abc |123 | 20| 22 |
|1 | abc |123 | 24| 22 |
|2 | abc |123 | 21| 22.5|
|2 | abc |123 | 24| 22.5|
|3 | pqr | 123| 27| 28 |
|3 | pqr | 123| 29| 28 |
目前的结果:
|Prop1 | prop2 |prop3| prop4|prop5|
|1 | abc |123 | 20| 20|
|1 | abc |123 | 24| 24|
|2 | abc |123 | 21| 21|
|2 | abc |123 | 24| 24|
|3 | pqr | 123| 27| 27|
|3 | pqr | 123| 29| 29|
答案 0 :(得分:1)
问题在于您正在Prop4
进行分组。要做你想做的事,你必须计算平均值,然后加入到原始表中以获得非平均值。此外,您只需将Prop4
分组到其他列,这样就不必在Average
中指定列。
from a1 in table1
group a1.Prop4 by new
{
a1.Prop1,
a1.Prop2,
a1.Prop3
} into grp
join a2 in table1
on grp.Key equals new {a2.Prop1, a2.Prop2, a2.Prop3};
select new
{
a2.Prop1, // or grp.Key.Prop1,
a2.Prop2, // or grp.Key.Prop2,
a2.Prop3, // or grp.Key.Prop3,
a2.Prop4,
Prop5 = grp.Average()
}
或者也可以使用子查询来完成。
from a1 in table1
select new
{
a1.Prop1,
a1.Prop2,
a1.Prop3,
a1.Prop4,
Prop5 = (from a2 in table1
where a2.Prop1 = a1.Prop1
&& a2.Prop2 = a1.Prop2
&& a2.Prop3 = a1.Prop3
select a2.Prop4).Average()
}