【问题标题】:C# Linq list with list in datagridC# Linq 列表与数据网格中的列表
【发布时间】:2015-03-09 15:03:11
【问题描述】:

我有一个包含字符串属性和另一个列表的列表。 如何在数据网格中同时显示字符串属性和包含列表中的属性?

public class Main
{
    public string Name { get; set; }
    public List<Info> Info { get; set; }
}

public class Info
{
    public string Info1 { get; set; }
    public string Info2 { get; set; }
}

我希望我的数据网格显示如下内容:

 #Name    #Info1    #Info2
  name     info1     info2
  name     info1     info2

非常感谢您。

【问题讨论】:

  • 什么DataGrid?您希望如何为 List&lt;Info&gt; 显示单个 Info1Info2
  • 仅从信息列表中获取最后一条记录

标签: c# wpf linq datagrid


【解决方案1】:

如果您可以更改Main 类,静态方法是提供您要公开的其他类中属性的string-properties:

public class Main
{
    public string Name { get; set; }
    public List<Info> Info { get; set; }
    public string Info1 { 
        get {
            return Info == null || Info.Count == 0 ? "" 
                : Info.Last().Info1; 
        } 
    }
    public string Info2
    {
        get
        {
            return Info == null || Info.Count == 0 ? ""
                : Info.Last().Info2;
        }
    }
}

其他方法:

  • 你可以使用一个新类来满足这个要求
  • 你可以使用匿名类型:

    this.dataGridView1.DataSource = mains
    .Select(m => new { 
        m.Name, 
        Info1 = m.Info.Last().Info1,
        Info2 = m.Info.Last().Info2, // add null or count=0 check here
    }).ToList();
    

【讨论】:

    【解决方案2】:

    如果您想从 Info 列表中获取您可以编写的每个 Main 项目的最后一条记录:

    var q = from m in mainList
            let i = m.Info.LastOrDefault()
            select new
            {
                m.Name,
                Info1 = i == null ? null : i.Info1,
                Info2 = i == null ? null : i.Info2,
            };
    

    【讨论】:

    • 是的,正是我想要的。谢谢。
    猜你喜欢
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 2011-04-12
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多