如何从包含不同类型类的通用列表中获取一个列表,简单地说

时间:2013-11-18 15:07:28

标签: c# list lambda extension-methods linq

我正在测试一个在我的项目中使用的简单代码块。我想举例说明。这是班级

class Processing
{
    public string Region { get; set; }
    public Car _car {get;set;}
    public double Kilometer { get; set; }
}



class Car
{
    public string LicansePlate { get; set; }
    public string Driver { get; set; }
    public double OdoMeter { get; set; }
}

现在。我创建了Processing of Processing。这个列表contatin:

  • 字符串区域
  • 汽车 _car
  • 公里

我想简单地使用SelectMany()使列表变平。为什么我使用这种方式是SelectMany()将来会使用“var”作为参考。我的目标outpur是这样的:

Region   LicancePlate   Driver   Odometer  Kilometer
 ...        ...          ...     ...        ...
 ...        ...          ...     ...        ...

此代码块仅为test.Main Block就是这样。

  public partial class MainWindow : Window
    {
      List<Processing> proces;
       public MainWindow()
        {
        InitializeComponent();
         }

    private void Window_Loaded_1(object sender, RoutedEventArgs e)
    {
        proces= new List<Processing>(){
                                            new Processing   {Region="Konya",Kilometer=96,_car= new Car(){LicansePlate="34 ABR 45", Driver="Hasan Doğan", OdoMeter=1322}},
                                            new Processing {Region="Karaman",Kilometer=233,_car=new Car{ LicansePlate="34 JT 9809" ,Driver="Ahmet Turgut",OdoMeter=1231}},
                                            new Processing { Region = "Ankara", Kilometer = 57, _car=new Car {LicansePlate = "34 JK 8547", Driver = "Tuncay Yıldız", OdoMeter = 472 }}
        };







        var kk = proces.SelectMany(b => b);


       dtgrid.ItemsSource = kk.ToList();
    }

var kk =kullanımlar.SelectMany(b =&gt; b); 句子给出错误。如何使用SelectMany()获取包含子字段的所有行。错误如下: 无法从使用中推断出来。尝试明确指定类型参数。

2 个答案:

答案 0 :(得分:3)

看起来您需要Select而不是SelectMany

var kk = proces.Select(p => new {
    Region = p.Region, 
    LicencePlate = p.c.LicencePlate, 
    Driver = p.c.Driver, 
    Odometer = p.c.Odometer, 
    Kilometer = p.Kilometer
});

答案 1 :(得分:0)

如果你想要一个“平面”列表,那么你必须迭代属性。 你可以这样做,例如

编写一个递归函数,迭代PROCESS [0]属性

     proces[0].getType().GetProperties() 

可以获得属性......

当迭代在Expando或类似的东西中获得属性推送时,那么

你有一张DYNAMIC FLAT清单:)

在土耳其语中,倾听ne olursa olsun grid benzeri birlisteiçinpropertererçerisindekilasslarıdabirdöngüylealıpexploobjeizo bas ... olay biter;)

kolaylıklardiliyorum...放轻松......