我有几个属性是在查询的选择部分的LINQ查询中计算出来的。我需要使用这些属性的结果在单独的属性中执行另一个计算。
目前我正在做这个
var query = data
.Select(model => new
{
SomeProperty1 = model.Sum(x => x.Foo),
SomeProperty2 = model.Sum(x => x.Bar),
SomeProperty3 = model.Sum(x => x.Bar) == 0 ? 0 :
model.Sum(x => x.Foo) / model.Sum(x => x.Bar)
};
想知道我是否有办法做到这一点
var query = data
.Select(model => new
{
SomeProperty1 = model.Sum(x => x.Foo),
SomeProperty2 = model.Sum(x => x.Bar),
SomeProperty3 = this.SomeProperty2 == 0 ? 0 :
this.SomeProperty1 / this.SomeProperty2
};
为简洁起见,大大缩短了示例。在我的实际查询中,计算更加冗长。
我相信这可以在模型中属性的get
部分完成,但只是想知道它是否可以像上面的linq查询中所示完成。
提前致谢!
答案 0 :(得分:4)
您不能在对象初始值设定项(C#Specification 7.6.10.2)中引用新创建的对象,但可以在LINQ查询中引入新的查询变量:
var query = from model in data
let SomeProperty1 = model.Sum(x => x.Foo)
let SomeProperty2 = model.Sum(x => x.Bar)
select new {
SomeProperty1,
SomeProperty2,
SomeProperty3 = SomeProperty2 == 0 ? 0 : SomeProperty1 / SomeProperty2
};
还要记住,当divident和divisor都是整数时,使用整数除法。