转换列表<;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);
}