当前位置:  开发笔记 > 数据库 > 正文

如何使用LINQ to SQL处理IN子查询?

如何解决《如何使用LINQtoSQL处理IN子查询?》经验,为你挑选了2个好方法。

我有点困惑于此.基本上我想在LINQ to SQL中执行类似以下SQL查询的操作:

SELECT f.* 
FROM Foo f
WHERE f.FooId IN (
    SELECT fb.FooId
    FROM FooBar fb
    WHERE fb.BarId = 1000
)

我们将非常感激地提供任何帮助.

谢谢.



1> aku..:
在LINQ to SQL中实现IN的一般方法
var q = from t1 in table1
        let t2s = from t2 in table2
                  where 
                  select t2.KeyField
        where t2s.Contains(t1.KeyField)
        select t1;
在LINQ to SQL中实现EXISTS的一般方法
var q = from t1 in table1
        let t2s = from t2 in table2
                  where 
                  select t2.KeyField
        where t2s.Any(t1.KeyField)
        select t1;



2> Samuel Jack..:

看看这篇文章.基本上,如果要获得等效的IN,则需要首先构造内部查询,然后使用Contains()方法.这是我翻译的尝试:

var innerQuery = from fb in FoorBar where fb.BarId = 1000 select fb.FooId;
var result = from f in Foo where innerQuery.Contains(f.FooId) select f;


Daren,LINQ to SQL将转换为SQL查询.迭代对象集合时,字典将非常有用.
链接现在已经死了,答案就没那么有用了.如果这个答案包含来自链接文章的更多信息会更好,正是为了防止这种情况.
使用第一个查询构造Dictionary可能会有更好的性能,因为第二个查询中的Contains()调用可以在O(1)中完成,而不是O(n).
推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有