Linq位数(真实百分比)?

时间:2016-07-04 09:57:41

标签: c# linq average

我想平均数据库中位值的时间。

基本上是:

ID 1, Value: True
ID 2, Value: False
ID 3, Value: True

所以我希望平均66%启用时间......

如何在linq中计算?

5 个答案:

答案 0 :(得分:8)

可能最简短的方法是:

double average = collection.Average(item => item.Value ? 1.0 : 0.0);

答案 1 :(得分:4)

有很多方法可以做到,这里有一个:

var pc = values
   .Select(v => v.Value ? 1f : 0f)
   .Average();

保持您的百分比值,使得1 == 100%,以便它们很好地相乘并使用P格式化它们以进行显示:

var pc = 2f/3f;
string.Format("{0:P0}", pc); // 67%

或者你将永远乘以并除以100。

答案 2 :(得分:2)

LINQ中的

?未经测试,但可能类似于:

var percent = source.Select(row => row.Value ? 1.0 : 0.0).Average();

您也可以使用Count()Count(x => x.Value),但这可能是两次访问数据库。

答案 3 :(得分:0)

static void Main(string[] args)
{
    List<Foo> foos = new List<Foo>();
    foos.Add(new Foo() { ID = 1, Value = true });
    foos.Add(new Foo() { ID = 2, Value = false });
    foos.Add(new Foo() { ID = 3, Value = true });

    double Average = (foos.Count(F => F.Value) / Convert.ToDouble(foos.Count)) * 100;
}


public class Foo
{
    public int ID { get; set; }
    public bool Value { get; set; }
}

答案 4 :(得分:0)

这假设您有<select id="ListSujet" name="ListSujet"> <option value="514402">Copie de Musculation</option> <option value="514430">Gecko Leopard</option> </select> 计算平均值:

IEnumerable<bool>