Linq位的平均值(真实百分比)

本文关键字:真实 百分比 平均值 Linq | 更新日期: 2023-09-27 17:54:23

我想从我的数据库中取一个位值的平均时间。

基本上就是:

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

所以我想让平均66%的启用时间…

如何在linq中计算?

Linq位的平均值(真实百分比)

最短的方法可能是:

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

有很多方法,这里有一个:

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

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

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

否则你将永远被100乘除。

in LINQ?未经测试,但可能是这样的:

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

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

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; }
}

假设您有一个IEnumerable<bool>,您正在计算其平均值:

// Just create some test data.
IEnumerable<bool> test = Enumerable.Range(0, 12).Select(x => x%3 == 0);
// Compute the average number of items that are true, as a %.
var average = 100 * test.Average(x => x ? 1.0 : 0.0);