【问题标题】:How To get one list from a Generic list which contains difrent type of class, simply如何从包含不同类型类的通用列表中获取一个列表,只需
【发布时间】:2013-11-18 15:07:27
【问题描述】:

我正在测试一个要在我的项目中使用的简单代码块。首先我想举个例子。这里是类

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

现在。我已经创建了处理列表。这个列表包含:

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

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

Region LicancePlate Driver 里程表公里
 ……………………
 ... ... ... ... ... 

这个代码块只是测试。主块是这样的。

  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 => b); 句子给出错误。如何使用 SelectMany() 获取带有子字段的所有行。错误如下: 无法从用法中推断出来。尝试明确指定类型参数。

【问题讨论】:

  • kullanımlar 似乎没有在您提供的代码中定义。请花一些时间使代码 sn-p 可读和可运行。
  • var 并不意味着对象不需要类型 - 只是类型是推断出来的
  • 对不起。我刚刚将 kullanımlar 更改为过程。我将给出匿名列表(var)。所以我必须能够使用 SelectMany 使列表变平,用于所有类型的列表。

标签: c# list lambda extension-methods linq


【解决方案1】:

看起来你想要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
});

【讨论】:

  • 这种方式是好的做法,但不是永久的解决方案。我想要 Flatting processinc dynamilly。因为我想给出引用 var 类型。所以我必须能够得到 Flated List ,每当我给出不同类型的列表时
  • 你必须使用动态 myFlatList = new ExpandoObject();将所有属性值从列表中动态放入此列表中,然后推送到网格中。 obaaaa ;)
【解决方案2】:

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

编写一个迭代proces[0]属性的递归函数

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

可以获取属性...

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

你有一个动态平面列表:)

在土耳其语中,liste ne olursa olsun grid benzeri bir liste içinpropertiler içerisindeki classları da bir döngüyle alıp expando obje içine bas.. olay biter ;)

kolaylıklar diliyorum...放轻松...

【讨论】:

    猜你喜欢
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 2011-12-29
    • 2018-07-24
    相关资源
    最近更新 更多