使用 linq 填充 DataTable 对象 [关闭]
Posted
技术标签:
【中文标题】使用 linq 填充 DataTable 对象 [关闭]【英文标题】:Populate DataTable object using linq [closed] 【发布时间】:2021-09-24 10:03:26 【问题描述】:我有一个 DataTable 对象,并在 foreach 循环中填充它。
ForEach(DirectoryEntity dEntity in ListOfEntities)
Datatable.Rows.Add(dEntity.Name,dEntity.Age);
我想把它转换成 linq。请告诉我怎么做?我尝试用谷歌搜索 3-4 小时,但找不到任何合适的答案。
【问题讨论】:
LINQ = 语言集成查询。 我觉得这个问题没有多大意义,真的。 也许是ListOfEntities.ForEach(e => Datatable.Rows.Add(e.Name,e.Age));
。 TBH,您不应该这样做,只需使用您已经在做的简单ForEach
; linq
在这里使用不正确。
另一方面,您能否告诉我们您正在使用这些数据做什么,这将有助于我们为您提供帮助,因为您尝试实现的目标可能还有其他替代方案。
我想把它转换成 linq -- 到底是哪一部分?为什么?
【参考方案1】:
如果ListOfEntities
已经来自List<T>
类型,您可以执行以下操作:
ListOfEntities.ForEach(entitiy => Datatable.Rows.Add(entity.Name,entity.Age);
如果你 ListOfEntities
只是 IEnumerable<T>
你可以这样做:
ListOfEntities.ToList().ForEach(entitiy => Datatable.Rows.Add(entity.Name,entity.Age);
只有ToList()
来自System.Linq
,请参见此处:MSDN。 ForEach
是在 List<T>
上定义的,请参见此处:MSDN。
LINQ 本身没有ForEach
。 LINQ(顾名思义)是一种查询语言。但是你不想查询数据,你只想执行一个动作。
【讨论】:
所以这不是 LINQ。底线是,OP 的代码不能转换成 LINQ。ToList
将是 LINQ,但一般来说您当然是对的:这不是 LINQ。问题是OP想要实现什么。如果我们只想有一个小的衬里而不是 foreach 代码会做到这一点。【参考方案2】:
entity.ForEach(fe => dt.Rows.Add(fe.Item1, fe.Item2, fe.Item3, fe.Item4););
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("ConfigValue", typeof(string));
dt.Columns.Add("Date", typeof(DateTime));
dt.Rows.Add(25, "Ind", "David", DateTime.Now);
dt.Dump("original datatable");
var entity = new List<(int, string, string, DateTime)>();
entity.Add((21, "isTrue", "false", DateTime.Now));
entity.Add((100, "Dilantin", "Melanie", DateTime.Now));
entity.Add((101, "Hydra", "Christoff", DateTime.Now));
entity.Add((50, "Christie", "Sam", DateTime.Now));
entity.Dump("entities");
entity.ForEach(fe => dt.Rows.Add(fe.Item1, fe.Item2, fe.Item3, fe.Item4););
//accept changes
dt.AcceptChanges();
dt.Dump("result");
【讨论】:
我不确定这与 OP 的问题有什么关系?以上是关于使用 linq 填充 DataTable 对象 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
从两个通过 LINQ 连接的 DataTable 创建组合的 DataTable。 C#