DataTable.Select使用IN运算符

时间:2010-07-28 17:07:47

标签: .net ado.net datatable

我从来没有找到一种优雅的方法来做到这一点,所以我想知道其他开发人员更喜欢哪些方法(性能,可读性等)。

是否有办法在DataTable.Select()函数中使用LIKE运算符,具体取决于对另一个DataTable的查询结果。例如,在SQL Server中,语法为:

Select SomeValue 
From Table1 
WHERE MyField IN 
   (Select SomeField From Table2 Where SomeColumn = SomeFilterVariable)

我知道从编码的角度来看,这是一个针对数据库的非常简单的查询,但这是在应用程序中完成的,这样做会导致数十万次调用服务器,因为涉及的计算次数。我已经定时了,最好一次获取所有数据并使用DataTable.Select()或DataTable.Compute()来获得我需要的结果。

我对包括LINQ到数据集等在内的任何事情持开放态度。我真正需要避免的是很多次访问服务器。

2 个答案:

答案 0 :(得分:1)

from t1 in db.Table1
where (from t2 in db.Table2 where t2.SomeColumn = SomeFilterVariable select t2.SomeField).Contains(t1.MyField)
select t1.SomeValue;

如果这对你来说太麻烦了:

var subQ = from t2 in db.Table2 
           where t2.SomeColumn = SomeFilterVariable 
           select t2.SomeField;

var query =  from t1 in db.Table1
             where subQ.Contains(t1.MyField)
             select t1.SomeValue;

这里很酷的是LINQ的工作方式,它将构建&只执行一个SQL语句,与您发布的SQL基本相同。

答案 1 :(得分:0)

通过上面的示例,我认为您可以使用RIGHT JOIN来获取所需的数据。这里:

SELECT A.SomeValue 
FROM Table1 A
RIGHT JOIN Table2 B
ON A.MyField = B.SomeField
WHERE B.SomeColumn = SomeFilterVariable