c# - Linq 查询多行子查询(无连接)

标签 c# linq

我想像在 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/

相关文章:

c# - sqlite 在锁定或异步时的正确用法是什么

java - 如何在 Java 或 C# 等静态类型语言中避免参数顺序依赖

c# - 从 xls 文件中选择行不为空的位置

c# - XElement 不应该从其父 Xelement 继承命名空间吗?

c# - 我如何在 LINQ 中使用 Regex.Replace 方法

c# - C#自动创建对象母类

c# - 引用等同于选角挑战。转换为子类型使 ReferenceEquals 返回 false

c# - LINQ 表达式不遵守 xml 边界

c# - 在哪里可以找到翻译的 Linq to Entity 查询到 Sql

c# - DbExpressionBinding 需要一个带有集合 ResultType 的输入表达式