Да, вы можете, но не напрямую в инициализаторе Row
.
Чтобы можно было повторно использовать Val3
и Val3
как в Val4
, так и в проекции.если бы вы использовали синтаксис метода LINQ, вы бы использовали промежуточную анонимную проекцию (Select
).В синтаксисе запроса вы можете использовать let
выражений для той же цели:
var query = from p in db.Table1
join s in db.Table2 on p.ID equals s.sID
join m in db.Table3 on s.sID equals m.ID
group s by p into G
let Val2 = G.Sum(x => x.someVal)
let Val3 = (from Z in db.Table4
join p in db.Table5 on Z.ID equals p.ZamowienieID
select p.otherVal).DefaultIfEmpty(0).Sum()
let Val4 = ((decimal)x.Val3 / (x.Val2 + (decimal)x.Val3)) * 100
orderby Val4
select new Row
{
Val1 = G.Key,
Val2 = Val2,
Val3 = Val3,
Val4 = Val4,
};