【问题标题】:using LINQ to delete specific rows from DataTable使用 LINQ 从 DataTable 中删除特定行
【发布时间】:2013-03-20 15:27:01
【问题描述】:

我想从名为 dt 的 DataTable 中删除特定行。

对于 SQL 中的表,我可以这样做:

DELETE FROM dt 
WHERE BASELINE_FOLDER = baselineSubfolder
AND BASELINE_FILE = baselineFilename
AND BASELINE_CHECKSUM = baselineChecksum;

对此是否有等效的 LINQ 语句?

【问题讨论】:

  • 你使用的是Linq to DataSet还是类似的东西?
  • tbh 我不知道,所以可能不是。我是 LINQ 的新手,除了我在网上找到的几个复制粘贴解决方案之外从未真正使用过它

标签: c# asp.net linq datatable


【解决方案1】:

假设您没有模型,只有 DataTable(这是我从 OP 中了解到的)。

//Cast to enumerable of `DataRow` and filter on your condition
var rows = dt.Rows.Cast<DataRow>().Where(row => row["BASELINE_FOLDER"] == baselineSubFolder && row["BASELINE_FILE" == baselineFilename
&& row["BASELINE_CHECKSUM"] == baselineChecksum).ToArray();
//Loop through and remove the rows that meet the condition
foreach(DataRow dr in rows)
{
  dt.Rows.Remove(dr);
}

【讨论】:

  • 这给了我一个演员错误:'System.Linq.Queryable.Cast(System.Linq.IQueryable)' 是一个'方法',在给定的情况下是无效的上下文\
  • @user1985189 我最初错过了() 和Cast,现在我已经改变了。您可能需要检查您有哪些参考资料。
  • 好的,谢谢它现在编译。但是在 foreach 循环中删除一行不会搞砸计数器(因为您在循环过程中删除了一行,所以它不再知道要循环多少个项目?)当我现在运行它时,它给出了这个错误:收藏已修改;枚举操作可能不会执行。
  • @user1985189 正确,请在 LINQ 查询中致电 ToArray() :)
  • 好吧,这行得通,但还有一件事我在最初的问题中没有提到。另一个条件是另一列 (STATUS) 必须为空白/空。但是,当我添加&amp;&amp; row["STATUS"] == "" 行时,它不会执行dt.Rows.Remove(dr); 行。如果我使用 null 而不是 "",同样的事情
【解决方案2】:

您可以将数据表转换为列表,并且可以使用RemoveAt() 来实现。

您可以将其转换为列表并使用以下代码

string baseLineFolder=dt.Rows["BASELINE_FOLDER"].ToString();
                string baseLineFile=dt.Rows["BASELINE_FILE"].ToString();
                string baseLineChecksum=dt.Rows["BASELINE_CHECKSUM"].ToString();
                var dtresult = dt.AsEnumerable();
                var result=(from r in dtresult
                            where(r.Field<string>("BASELINE_FOLDER")!=baseLineFolder)
                            &&(r.Field<string>("BASELINE_FILE")!=baseLineFile)
                            &&(r.Field<string>("BASELINE_CHECKSUM ")!=baseLineChecksum)
                              select r).ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多