在select语句中重用匿名变量

时间:2018-02-11 07:16:53

标签: c# .net linq

db.opt.Select(z => new { 
    z.QuestionTitle,
    Count = z.Responces.Where(x => x.Responseval == Constants.options.Agree).Count(),
    Perc = (totresponcecount/Count)*100
}).ToList();

在上面的lambda中,计算百分比,例如我想写(totresponcecount/Count)*100,其中Count已经在上面的陈述中计算过。

那么我怎样才能访问Count值来编写Perc = (totresponcecount/Count)*100

2 个答案:

答案 0 :(得分:5)

我认为在这种情况下使用let关键字查询语法更好:

var result = from z in db.opt
             let count = z.Responces.Count(x => x.Responseval == Constants.options.Agree)
             select new { z.QuestionTitle, count , Perc = (totresponcecount/count) * 100 };

另请注意,您可以将谓词传递给Count方法,因此不需要Where(...).Count()

答案 1 :(得分:4)

我建议再使用一个select语句来保存这个变量:

db
    .opt
    .Select(z => new
    {
        z.QuestionTitle,
        Count = z.Responces.Where(x => x.Responseval == Constants.options.Agree).Count()
    })
    .Select(z => new
    {
        z.QuestionTitle, 
        z.Count,
        Perc = (totresponcecount / z.Count) * 100
    })
    .ToList();