转换列表<;T>;使用c#

转换列表<;T>;使用c#,c#,linq,C#,Linq,下面是课堂 public class ErrorDTO { public string Type { get; set; } public string Data { get; set; } } 我有错误列表,即list 以下是数据 Type1 x Type1 y Type2 z Type3 p Type2 q 等等 我想用以下方式在xaml的DataGrid中显示这一点 Type1 Type2 Type3 x z p y

下面是课堂

public class ErrorDTO
{
    public string Type { get; set; }
    public string Data { get; set; }
}
我有错误列表,即
list
以下是数据

Type1  x
Type1  y
Type2  z
Type3  p
Type2  q
等等

我想用以下方式在xaml的DataGrid中显示这一点

Type1  Type2  Type3
 x       z       p
 y       q       
我该怎么做?我尝试将列表转换为数据表,但没有成功。 invalidDataList是
列表


以下代码应该可以帮助您:

lst.GroupBy (l => l.Type).Select (l => new {
       Type1 = l.Where (x => x.Type == "Type1").Select (x => x.Data),
       Type2 = l.Where (x => x.Type == "Type2").Select (x => x.Data),
       Type3 = l.Where (x => x.Type == "Type3").Select (x => x.Data)
    });
对于透视表,如果您不知道列表中有多少类型,我认为最简单的解决方案是首先检查
lst
列表中的不同类型:

var types = lst.Select (l => l.Type).Distinct().OrderBy (l => l).ToList();
然后使用:

var dt=新数据表(“测试”);
数据行工作行;
for(int i=0;il.Type==types[i])。选择(l=>l.Data.ToList();
foreach(dataToInsert中的var元素)
{
workRow=dt.NewRow();
工作行[类型[i]]=元素;
dt.Rows.Add(工作行);
}
}
好的,那么

var typed = invalidDataList
                 .GroupBy(d => d.Type)
                 .Select(g => new
                     {
                         Type = g.Key,
                         Data = g.Select(d => d.Data).ToList()
                     })
                 .ToList();

var table =  new DataTable();
foreach(var type In typed)
{
    table.Columns.Add(type.Type);
}

var maxCount = typed.Max(t => t.Data.Count);
for(var i = 0; i < maxCount; i++)
{
    var row = table.NewRow();
    foreach(var type in typed)
    {
        if (type.Data.Count > i)
        {
            row[type.Type] = type.Data[i]
        }
    }

    table.Rows.Add(row);
}
var typed=invalidDataList
.GroupBy(d=>d.Type)
.选择(g=>new
{
类型=g.键,
Data=g.Select(d=>d.Data).ToList()
})
.ToList();
var table=新数据表();
foreach(类型化中的变量类型)
{
table.Columns.Add(type.type);
}
var maxCount=typed.Max(t=>t.Data.Count);
对于(变量i=0;ii)
{
行[type.type]=type.Data[i]
}
}
table.Rows.Add(行);
}

尝试用LINQ搜索pivot。如果我不知道pivot有多少种类型,即Type1、2、3、4等等,以及它们是什么,这可能会对您有所帮助
var dt = new DataTable("Test");
DataRow workRow;

for (int i = 0; i < types.Count; i++)
{
    dt.Columns.Add(types[i]);
    var dataToInsert = lst.Where (l => l.Type == types[i]).Select (l => l.Data).ToList();
    foreach (var element in dataToInsert)
    {
        workRow = dt.NewRow();
        workRow[types[i]] = element;
        dt.Rows.Add(workRow);
    }
}
var typed = invalidDataList
                 .GroupBy(d => d.Type)
                 .Select(g => new
                     {
                         Type = g.Key,
                         Data = g.Select(d => d.Data).ToList()
                     })
                 .ToList();

var table =  new DataTable();
foreach(var type In typed)
{
    table.Columns.Add(type.Type);
}

var maxCount = typed.Max(t => t.Data.Count);
for(var i = 0; i < maxCount; i++)
{
    var row = table.NewRow();
    foreach(var type in typed)
    {
        if (type.Data.Count > i)
        {
            row[type.Type] = type.Data[i]
        }
    }

    table.Rows.Add(row);
}