如何在DataTable filterExpression中使用EXISTS?

时间:2013-05-22 06:49:56

标签: c# .net

我需要在DataTable中尝试使用

进行过滤C#.net
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

3 个答案:

答案 0 :(得分:2)

您可以使用linq:

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

如果要将其与数据表一起使用,请使用Linq-To-Dataset。添加对:

的引用
  

System.Data.DataSetExtensions

并使用:

字符串字段

bool exist = tabla.AsEnumerable().Any(p => p.Field<string>("id") == "whatever");
对于int字段

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

答案 1 :(得分:2)

RowFilter syntax中没有exists

所以我建议改为使用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();

答案 2 :(得分:1)

检查数据行集合的长度。

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");