使用 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,您不应该这样做,只需使用您已经在做的简单ForEachlinq 在这里使用不正确。 另一方面,您能否告诉我们您正在使用这些数据做什么,这将有助于我们为您提供帮助,因为您尝试实现的目标可能还有其他替代方案。 我想把它转换成 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 查询 - 如何构建 select 子句?

从两个通过 LINQ 连接的 DataTable 创建组合的 DataTable。 C#

如何在不更改 RowState 属性的情况下使用 LINQ 从数据库中复制 DataTable

LINQ to DataSet

用 JSON 对象填充 DataTable

从 linq 中选择单个值