【问题标题】:Datatable search by LINQ to avoid duplication通过 LINQ 进行数据表搜索以避免重复
【发布时间】:2018-09-12 08:08:05
【问题描述】:

我在 dataTable 中有一列空白行

Column1
A
B
C

D

E

我需要设置是否存在并避免添加,但不应计算空白行。只有包含数据的行才应该在(如果存在)中。谢谢

 bool exists = dt.Select().ToList().Exists(row => row["column1"].ToString() == txtbox)



if(exists == true)
{}
else

//它包含空白,所以它变为true,我需要的是不应该包含空白行。

【问题讨论】:

  • 如果搜索“搜索字段”,如何包含空白行?只需处理用户没有在搜索文本框中输入任何内容的情况。
  • 该搜索字段是一个可以为空或空格的文本框。因此,首先我需要收集所有空白的行,然后在该集合中,我将根据搜索字段检查是否存在。但我不知道代码
  • 你能提供一个有意义的例子吗? "搜索字段可以为空或空格" .. "...收集所有没有空格的行" .. "我将根据搜索字段” 没有意义。
  • bool exists = dt.Select().ToList().Exists(row => row["column1"].ToString() == txtbox),我已经有了这个代码,但它包含空白细绳 ””。我需要绕过那个 "" 空白字符串。

标签: c# linq datatable


【解决方案1】:
var lignesNonContainEmptyString = dt.Select()
                   .Where(row => row["column1"] != null 
                                && row["column1"].ToString() == txtbox 
                                && !string.IsNullOrEmpty(row["column1"].ToString()))

bool exists = lignes.Count() != 0;

bool exists = dt.Select()
                       .Any(row => row["column1"] != null 
                                    && row["column1"].ToString() == txtbox 
                                    && !string.IsNullOrEmpty(row["column1"].ToString()))

【讨论】:

  • bool exists = dt.Select().ToList().Exists(row => row["column1"].ToString() == txtbox),此代码已经可以工作,但不支持空白行,我需要绕过那些空白行,它应该返回真或假
  • 哇,感谢它确实有效,节省了很多时间。
  • 我喜欢Lines.Any(),而不是lignes.Count() != 0。可读性更高,效率更高。
  • dt.Select().ToList() 请不要! DataTable 是一个内存中的集合,可以使用 LINQ(AsEnumerable()) 进行查询。 DataTable.Select 将迭代所有行并创建一个新的DataRow[]ToList() 将迭代所有行并创建一个List(Of DataRow)。你可以使用Any,而不是Exists
  • @TimSchmelter,我在矩阵中看到了一个错误。相同的评论相同的作者:)
【解决方案2】:

如果文本框为空,您想返回false,因此添加文本框的条件。

bool exists = !string.IsNullOrWhiteSpace(txtbox)
              && dt.Select().ToList()
                   .Exists(row => row["column1"].ToString() == txtbox)

顺便说一句,您可以添加对System.Data.DataTableExtensions的引用,而不是使用.Select().ToList(),并使用扩展名AsEnumerable

dt.AsEnumerable().Any( .....

【讨论】:

    【解决方案3】:

    这个怎么样:非linq方式

    bool DataTableNonEmptyCount()
    {
    int count =0;
    foreach (DataColumn col in row.Table.Columns)
        if (!row.IsNull(col))
          count ++;
    
      return count;
    }
    

    这将返回列中所有非空行的计数。

    【讨论】:

      【解决方案4】:

      基于蒂埃里的answer,也可以使用Any(predicate) syntax

      var existsLineWithoutEmptyString = 
                   dt.AsEnumerable()
                     .Any(row => row["column1"] != null 
                                 && row["column1"].ToString() == txtbox 
                                 && !string.IsNullOrEmpty(row["column1"].ToString()))
      

      【讨论】:

        【解决方案5】:

        这段代码可以帮助你

        from a in list where ( Column1 != null || Column1 != "")
        && Column1 == searchfield
        select a
        

        【讨论】:

        • 布尔存在 = dt.Select().ToList().Exists(row => row["column1"].ToString() == txtbox)。我需要修改这段代码,因为它包含空白输入
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-17
        • 1970-01-01
        • 2017-07-16
        • 1970-01-01
        相关资源
        最近更新 更多