我想像在 MySql 中那样使用多行子查询进行查询,但我想不使用join
,所以我的 sql 查询是:
select * from html_files_tab where html_files_tab.encoded_id in
(select html_src_files_relationsip_tab.file_fk from html_src_files_relationsip_tab where html_src_files_relationsip_tab.src_fk == '1' );
我试过:
var fileBeans = ( from srcFileTab in conn.Table<FileBean>() where
srcFileTab.fileId in ( from srcFileRelationSipTab in
conn.Table<HtmlSrcFileRelationship>() where
srcFileRelationSipTab.srcFk == encodedSrcId select
srcFileRelationSipTab.fileFk ) select srcFileTab ).ToList();
但是我遇到了一些错误,有没有没有加入的方法?
附注使用连接方法:
var fileBeans = ( from fileTab in conn.Table<FileBean>()
join relationTab in conn.Table<HtmlSrcFileRelationship>()
on fileTab.fileId equals relationTab.fileFk
where relationTab.srcFk == encodedSrcId && relationTab.srcFk == encodedSrcId
select fileTab ).ToList();
使用 join 我得到一个异常:
Exception thrown: 'System.NotSupportedException' in SQLite.Net.dll
完整的堆栈跟踪:
at SQLite.Net.TableQuery`1.GenerateCommand(String selectionList)
at SQLite.Net.TableQuery`1.GetEnumerator()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at HiTech.DataBase.selectFileBeansBySrc(String encodedSrcId)
最佳答案
您可以使用嵌套迭代的 LinQ 选项,而不是尝试在 LinQ 中重新创建 SQL,这与子查询几乎相同。
var tabs = (from srcFileTab in conn.Table<FileBean>()
from srcFileRelationSipTab in conn.Table<HtmlSrcFileRelationship>()
where srcFileRelationSipTab.srcFk == encodedSrcId
&& srcFileTab.fileId == srcFileRelationSipTab.fileFk
select srcFileTab ).ToList();
关于c# - Linq 查询多行子查询(无连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37652024/