如何在数据表过滤器表达式中使用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
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");