C# 使用C将Datatable转换为嵌套列表/对象
我有一个这样的数据表。和数据模型C# 使用C将Datatable转换为嵌套列表/对象,c#,linq,ienumerable,C#,Linq,Ienumerable,我有一个这样的数据表。和数据模型 public class Details { public String Id { get; set; } public String Type { get; set; } public String Name { get; set; } public String Terms { get; set; } public List<FAQ> Faqs { get;
public class Details
{
public String Id { get; set; }
public String Type { get; set; }
public String Name { get; set; }
public String Terms { get; set; }
public List<FAQ> Faqs { get; set; }
}
public class FAQ
{
public string Question { get; set; }
public string Answer { get; set; }
}
我想将其转换为列表类型的详细信息,如
列表详细信息列表;我试着这样做,但行在重复。
如果删除了详细信息,则会得到不同的结果,但由于匿名强制转换异常,无法将其转换为详细信息类型
var details = dt.AsEnumerable().GroupBy(x =>
new Details //removing this detail gives distinct record as expected. But can not cast
{
ID= x.Field<decimal>("ID"),
NAME = x.Field<string>("NAME"),
TYPE = x.Field<string>("TYPE"),
TERMS = x.Field<string>("TERMS")
})
.Select(x =>
new
{
x.Key.ID,
x.Key.NAME,
x.Key.TYPE,
x.Key.TERMS,
Faqs =
x.Select(
s => new Faq {Question = s.Field<string>("QUESTION"), Answer = s.Field<string>("ANSWER")})
}).ToList();
如何修复它并将其转换为详细信息列表您可以按匿名对象对多个键进行分组,然后从DataTable中选择所需的列 下面的代码首先使用ID、名称、类型和术语对数据进行分组,然后在Select子句中创建新的详细信息对象
还有一点,如果Id本身是唯一的,那么您不需要按多个列进行分组,您只能按Id进行分组。您需要选择您的详细信息,和GroupBy正确的分组元素。我也尝试过这样做,但它说不能隐式地将第x行上的system.collection.generic类型转换为system.generic.list。选择s=>new Faq{Question=s.FieldQUESTION,Answer=s.FieldANSWER}添加ToList以选择Faq。更新后,将填充FAQ的详细信息
var details = dt.AsEnumerable().GroupBy(x =>
new
{
ID= x.Field<decimal>("ID"),
NAME = x.Field<string>("NAME"),
TYPE = x.Field<string>("TYPE"),
TERMS = x.Field<string>("TERMS")
})
.Select(x =>
new Details
{
x.Key.ID,
x.Key.NAME,
x.Key.TYPE,
x.Key.TERMS,
Faqs =
x.Select(
s => new Faq {Question = s.Field<string>("QUESTION"), Answer = s.Field<string>("ANSWER")}).ToList()
}).ToList();