2

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中使用存在

4

3 回答 3

2

RowFilter 语法中没有existsin

所以我建议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();
于 2013-05-22T06:56:28.757 回答
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);
于 2013-05-22T06:52:49.387 回答
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");
于 2013-05-22T06:54:23.843 回答