代码之家  ›  专栏  ›  技术社区  ›  David

数据表。使用In运算符选择

  •  0
  • David  · 技术社区  · 15 年前

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

    根据对另一个数据表的查询结果,是否可以在dataTable.select()函数中使用like运算符?例如,在SQL Server中,语法为:

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

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

    我对任何东西都很开放,包括LINQ到数据集等。我真正需要避免的是大量到服务器的访问。

    2 回复  |  直到 9 年前
        1
  •  1
  •   marc_s    9 年前
    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相同。

        2
  •  0
  •   Eduardo Rascon    15 年前

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

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