C# 如何使用DataTable filterExpression中的EXISTS?

C# 如何使用DataTable filterExpression中的EXISTS?,c#,.net,C#,.net,我需要在我尝试过的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,

我需要在我尝试过的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

您可以使用linq:

bool exist = db.Ids.Any (u => u.id == "whateverID");
如果要将其与datatable一起使用,请使用Linq to数据集。添加对以下内容的引用:

System.Data.DataSetExtensions

和使用:

对于字符串字段:

对于int字段:


检查数据行集合的长度

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");
在中不存在

因此,我建议改为使用:


这将生成一个错误语法错误:“distinct”运算符datatable后缺少操作数。Select不允许使用真正的sql,从当前数据表计算值非常有限。所以这不起作用。别忘了DataTable只是内存中的一个对象。@Tim Schmelter:是的,你是对的,现在我更新了我的答案。thanksi需要不使用linqHe的解决方案他想要的是EXISTS语法,而不是WHERE。因此,与表_b的内部联接类似,错误是表达式包含未定义的函数调用。我已尝试使用您的代码,但在a上出现错误,而名称a在当前的表中不存在context@Wella:抱歉,似乎是重命名问题;所以不是tableBRows.Anyb=>a.Field。。。使用Anyb=>b。相应地编辑了我的答案。有错误,因为指定的强制转换无效。从你的代码3line@Wella:唯一的强制转换是在DataRow.Field中,因此dtAdvancedSearched或/和表_b中的id列的类型似乎不是int。如果它实际上是字符串,则只需使用例如:b.Fieldid.Yes我根据我的数据表数据类型使用了数据类型。但是这个错误会产生,因为我在那里用过dr[ahu ID]==row[ahu ID]现在会产生这个错误,但是根据我需要的数据集,我需要得到一些记录的结果,源不包含数据行。
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");
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();