繁体   English   中英

通过 LINQ 进行数据表搜索以避免重复

[英]Datatable search by LINQ to avoid duplication

我在数据表中有一个空白行的列

Column1
A
B
C

D

E

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

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



if(exists == true)
{}
else

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

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()))

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

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

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

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

此代码可以帮助您

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

这个怎么样:非 linq 方式

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

  return count;
}

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

根据 Thierry 的回答,您还可以使用Any(predicate) 语法

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM