我从来没有找到一种优雅的方法来做到这一点,所以我想知道其他开发人员更喜欢哪些方法(性能,可读性等)。
是否有办法在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到数据集等在内的任何事情持开放态度。我真正需要避免的是很多次访问服务器。
答案 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