using System;
using System.Linq ;
using System.Collections .Generic ;
public class Test
{
static Random
rand = new Random
( ) ;
static void Main( string[ ] args)
{
var products = new List< Product> ( ) ;
for ( int i = 0 ; i < 10 ; i++ )
{
products.Add ( new Product
{
Name = "Product " + ( i + 1 ) ,
StartDetailRating = GenerateRandomVotes( )
} ) ;
}
var productWithVotes = products.Select ( x => new
{
Product = x,
VoteAverage = x.StartDetailRating .Any ( ) ? x.StartDetailRating .Average ( r => r.VoteValue ) : 0
} ) ;
foreach ( var result in productWithVotes)
{
Console.WriteLine ( "{0} scored an average of {1} votes" , result.Product .Name , result.VoteAverage ) ;
}
}
static List< StarDetailRating> GenerateRandomVotes( )
{
var count
= rand .
Next ( 50 ) ; var results = new List< StarDetailRating> ( count) ;
for ( int i = 0 ; i < count; i++ )
{
results.Add ( new StarDetailRating
{
VoteValue
= rand .
Next ( 0 , 15 ) } ) ;
}
return results;
}
}
public class Product
{
public string Name { get; set; }
public IEnumerable< StarDetailRating> StartDetailRating { get; set; }
}
public class StarDetailRating
{
public int VoteValue { get; set; }
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CiAgICBzdGF0aWMgUmFuZG9tIHJhbmQgPSBuZXcgUmFuZG9tKCk7CgogICAgc3RhdGljIHZvaWQgTWFpbihzdHJpbmdbXSBhcmdzKQogICAgewogICAgICAgIHZhciBwcm9kdWN0cyA9IG5ldyBMaXN0PFByb2R1Y3Q+KCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgcHJvZHVjdHMuQWRkKG5ldyBQcm9kdWN0CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgPSAiUHJvZHVjdCAiICsgKGkgKyAxKSwKICAgICAgICAgICAgICAgIFN0YXJ0RGV0YWlsUmF0aW5nID0gR2VuZXJhdGVSYW5kb21Wb3RlcygpCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICB2YXIgcHJvZHVjdFdpdGhWb3RlcyA9IHByb2R1Y3RzLlNlbGVjdCh4ID0+IG5ldwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0ID0geCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZvdGVBdmVyYWdlID0geC5TdGFydERldGFpbFJhdGluZy5BbnkoKSA/IHguU3RhcnREZXRhaWxSYXRpbmcuQXZlcmFnZShyID0+IHIuVm90ZVZhbHVlKSA6IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgZm9yZWFjaCAodmFyIHJlc3VsdCBpbiBwcm9kdWN0V2l0aFZvdGVzKQogICAgICAgIHsKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoInswfSBzY29yZWQgYW4gYXZlcmFnZSBvZiB7MX0gdm90ZXMiLCByZXN1bHQuUHJvZHVjdC5OYW1lLCByZXN1bHQuVm90ZUF2ZXJhZ2UpOwogICAgICAgIH0KICAgIH0KCiAgICBzdGF0aWMgTGlzdDxTdGFyRGV0YWlsUmF0aW5nPiBHZW5lcmF0ZVJhbmRvbVZvdGVzKCkKICAgIHsKICAgICAgICB2YXIgY291bnQgPSByYW5kLk5leHQoNTApOwogICAgICAgIHZhciByZXN1bHRzID0gbmV3IExpc3Q8U3RhckRldGFpbFJhdGluZz4oY291bnQpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIHJlc3VsdHMuQWRkKG5ldyBTdGFyRGV0YWlsUmF0aW5nCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZvdGVWYWx1ZSA9IHJhbmQuTmV4dCgwLCAxNSkKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHRzOwogICAgfQp9CgpwdWJsaWMgY2xhc3MgUHJvZHVjdAp7CiAgICBwdWJsaWMgc3RyaW5nIE5hbWUgeyBnZXQ7IHNldDsgfQogICAgcHVibGljIElFbnVtZXJhYmxlPFN0YXJEZXRhaWxSYXRpbmc+IFN0YXJ0RGV0YWlsUmF0aW5nIHsgZ2V0OyBzZXQ7IH0KfQoKcHVibGljIGNsYXNzIFN0YXJEZXRhaWxSYXRpbmcKewogICAgcHVibGljIGludCBWb3RlVmFsdWUgeyBnZXQ7IHNldDsgfQp9