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

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

How can you handle an IN sub-query with LINQ to SQL?

我对此有些困惑。 基本上,我想在LINQ to SQL中执行以下SQL查询:

1
2
3
4
5
6
7
SELECT f.*
FROM Foo f
WHERE f.FooId IN (
    SELECT fb.FooId
    FROM FooBar fb
    WHERE fb.BarId = 1000
)

任何帮助将不胜感激。

谢谢。


在LINQ to SQL中实现IN的一般方法

1
2
3
4
5
6
var q = FROM t1 IN table1
        let t2s = FROM t2 IN table2
                  WHERE <Conditions FOR table2>
                  SELECT t2.KeyField
        WHERE t2s.Contains(t1.KeyField)
        SELECT t1;

在LINQ to SQL中实现EXISTS的一般方法

1
2
3
4
5
6
var q = FROM t1 IN table1
        let t2s = FROM t2 IN table2
                  WHERE <Conditions FOR table2>
                  SELECT t2.KeyField
        WHERE t2s.Any(t1.KeyField)
        SELECT t1;

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

1
2
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;

1
2
3
4
5
6
7
8
9
FROM f IN Foo
    WHERE f.FooID ==
        (
            FROM fb IN FooBar
            WHERE fb.BarID == 1000
            SELECT fb.FooID

        )
    SELECT f;

尝试使用两个单独的步骤:

1
2
3
4
5
6
7
8
9
// CREATE a Dictionary / SET / Collection fids FIRST
var fids = (FROM fb IN FooBar
            WHERE fb.BarID = 1000
            SELECT NEW { fooID = fb.FooID, barID = fb.BarID })
            .ToDictionary(x => x.fooID, x => x.barID);

FROM f IN Foo
WHERE fids.HasKey(f.FooId)
SELECT f

//首先创建一个Dictionary / Set / Collection fids

查找其他关节炎

1
2
3
4
5
6
7
8
var fids = (FROM fb IN FooBar
            WHERE fb.BarID = 1000
            SELECT NEW { fooID = fb.FooID, barID = fb.BarID })
            .ToDictionary(x => x.fooID, x => x.barID);

FROM f IN Foo
WHERE fids.HasKey(f.FooId)
SELECT f

1
2
3
4
5
6
FROM f IN foo
WHERE f.FooID equals model.FooBar.SingleOrDefault(fBar => fBar.barID = 1000).FooID
SELECT NEW
{
f.Columns
};

//首先创建一个Dictionary / Set / Collection fids

查找其他关节炎

1
2
3
var fids = (FROM fb IN FooBar WHERE fb.BarID = 1000 SELECT NEW { fooID = fb.FooID, barID = fb.BarID }) .ToDictionary(x => x.fooID, x => x.barID);

FROM f IN Foo WHERE fids.HasKey(f.FooId) SELECT f

1
2
var foos = Foo.Where
( f => FooBar.Where(fb.BarId == 1000).Select(fb => fb.FooId).Contains(f.FooId));

试试这个

1
2
var fooids = FROM fb IN foobar WHERE fb.BarId=1000 SELECT fb.fooID
var ff = FROM f IN foo WHERE f.FooID = fooids SELECT f


推荐阅读

    linux命令行执行py?

    linux命令行执行py?,系统,环境,官网,一致,文件,程序,脚本,源文件,后台,终端,l

    linux查看执行命令?

    linux查看执行命令?,系统,服务,情况,信息,命令,暂停,标准,概念,实时,第一,lin

    linux命令执行不动了?

    linux命令执行不动了?,系统,电脑,数据,管理,信息,密码,命令,环境,地方,分析,l

    linux脚步中执行命令?

    linux脚步中执行命令?,工具,代码,命令,名称,系统,连续,环境,发行,文件,终端,l

    linux执行权限命令行?

    linux执行权限命令行?,地址,电脑,系统,数字,工作,权限,目录,文件,新增,信息,L

    程序执行linux命令?

    程序执行linux命令?,系统,工作,地址,环境,信息,管理,命令,文件,目录,程序,lin

    linux执行2个命令?

    linux执行2个命令?,工作,系统,基础,命令,基础知识,信息,管理,在线,概念,第一

    linux命令批量执行?

    linux命令批量执行?,系统,代码,工作,周期性,数据,定期,环境,命令,文件,脚本,l

    linux二进制执行命令?

    linux二进制执行命令?,系统,工作,情况,代码,信息,位置,地址,命令,文件,目录,L

    linux执行退出命令?

    linux执行退出命令?,档案,状态,工作,命令,信息,地址,电脑,系统,编辑,文件,lin

    linux查询分辨率命令?

    linux查询分辨率命令?,情况,设备,系统,分辨率,数据,命令,屏幕,屏幕分辨率,

    linux中后台执行命令?

    linux中后台执行命令?,系统,状态,暂停,灵活,电脑,网络,服务,第一,名字,命令,l

    linux常用命令查询?

    linux常用命令查询?,工作,地址,系统,信息,命令,目录,管理,标准,常用命令,控

    linux命令查询汉语?

    linux命令查询汉语?,工作,地址,系统,信息,命令,目录,标准,状态,软件,亚洲,基

    linux常用的执行命令?

    linux常用的执行命令?,系统,地址,工作,基础,标准,命令,工具,环境,信息,代码,L

    linux如何使用命令?

    linux如何使用命令?,系统,信息,基础,软件,工作,一致,工具,名称,位置,情况,lin

    linux下查询历史命令?

    linux下查询历史命令?,地址,信息,系统,服务,数据,连续,命令,数字,名称,环境,l

    linux执行线程命令?

    linux执行线程命令?,系统,工作,线程,软件,服务,管理,信息,环境,名称,命令,lin

    linux查询表结构命令?

    linux查询表结构命令?,系统,标准,信息,数据,地址,设备,时间,适当,软件,命令,l

    linux网络命令查询?

    linux网络命令查询?,信息,网络,系统,地址,工作,状态,技术,电脑,命令,设备,lin