如何在数据表过滤器表达式中使用EXISTS

本文关键字:EXISTS 表达式 过滤器 数据表 | 更新日期: 2023-09-27 18:14:51

我需要在C#.net中过滤DataTable,我已经尝试过

string sortExpression="id ASC";
string filterExpression;
DataTable dt;
DataRow[] drA;
filterExpression = "exists (select distinct id from table_b b where a.id=b.id )";
drA = dtAdvancedSearched.Select(filterExpression, sortExpression);
dt = drA .CopyToDataTable();

但是这会产生一个错误

请问谁能帮我使用存在于。net

如何在数据表过滤器表达式中使用EXISTS

RowFilter语法中没有exists in

所以我建议使用Linq-To-DataSet代替:

IEnumerable<DataRow> tableBRows = table_b.AsEnumerable();
DataTable dt = dtAdvancedSearched.AsEnumerable()
    .Where(row => tableBRows.Any(b => b.Field<int>("id") == row.Field<int>("id")))
    .OrderBy(row => row.Field<int>("id"))
    .CopyToDataTable();

你可以使用linq:

bool exist = db.Ids.Any (u => u.id == "whateverID");

如果你想和datatable一起使用,请使用Linq-To-Dataset。添加引用到:

System.Data.DataSetExtensions

和使用:

for string field:

bool exist = tabla.AsEnumerable().Any(p => p.Field<string>("id") == "whatever");

for int:

bool exist = tabla.AsEnumerable().Any(p => p.Field<int>("id") == 5);

检查数据行收集的长度。

filterExpression = "select distinct  id from table_b b where a.id=b.id";
drA = dtAdvancedSearched.Select(filterExpression, shortExpression);
if(drA.Length != 0)
{
    // do something...
    dt = drA .CopyToDataTable();
}

编辑

第一个方法不工作,所以发布了另一个方法

DataTable dt = dtAdvancedSearched.DefaultView.ToTable(true, "Column1", "Column2");