我有几个属性是在查询的选择部分中的 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 查询中所示那样完成。
提前致谢!
最佳答案
您不能在对象初始值设定项中引用新创建的对象(C# 规范 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
};
另请记住,当被除数和除数都是整数时,将使用整数除法。
关于c# - 在计算字段中使用先前属性的 Linq 选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42796616/