2014-04-26 143 views
2

我知道这是有点混乱,但我试图解释我的问题。按属性排序列表,但随机排序的属性

public enum Manufacturer { Bmw, Ford, Volvo }; 

public class Car 
{ 
    public Car(Manufacturer man, string name) 
    { 
     this.Man = man; 
     this.Name = name; 
    } 

    public Manufacturer Man { get; set; } 
    public string Name { get; set; } 
} 

//Program 
private static void Main(string[] args) 
{ 
    List<Car> myCars = new List<Car>(); 
    Car a = new Car(Manufacturer.Bmw, "M6"); 
    Car b = new Car(Manufacturer.Ford, "Focus"); 
    Car c = new Car(Manufacturer.Bmw, "i8"); 
    Car d = new Car(Manufacturer.Ford, "Mondeo"); 
    Car e = new Car(Manufacturer.Volvo, "XC60"); 
    myCars.Add(a); 
    myCars.Add(b); 
    myCars.Add(c); 
    myCars.Add(d); 
    myCars.Add(e); 
    myCars = myCars.OrderBy(x => x.Man).ToList(); //Not exactly what i need 
} 

我想按制造商属性对我的清单进行排序,所以我这样做。

但我真正想要的是,按制造商排序,但随机顺序。 所以有时候宝马会是第一位的,有时候是福特,但是所有的时候,同一个制造商的车都会彼此相邻。

希望我能解释一下。 感谢您的帮助。由制造商

回答

1

集团的汽车,然后排序按随机顺序组,每个组选择所有汽车:

var random = new Random(); 
var result = myCars.GroupBy(c => c.Man) 
        .OrderBy(g => random.Next()) 
        .SelectMany(g => g); 
+1

正是我neeed! Thx man :) – Hlavson

+0

@Hlavson btw在C#中有很好的[Collection Initializers](http://msdn.microsoft.com/en-us/library/bb384062.aspx),你可以用它来以更简单的方式创建和初始化集合 –

+1

它看起来不错,干净。谢谢。 – Hlavson