子查询在LINQ语句的Where子句中
所以我试图按照这个例子在这个LINQ查询的where子句中有一个子查询。
var innerquery =
from app in context.applications
select new { app.app_id };
IEnumerable<postDatedCheque> _entityList = context.postDatedCheques
.Where(e => innerquery.Contains(e.appSancAdvice.application.app_id));
目标是从应用程序表中具有app_id的postDatedCheques中选择这些记录。
但是我在where子句中遇到了以下错误:
我编码错了什么?
我认为一个简单的加入就可以完成这项工作。 它会过滤出没有相对“应用”的“检查”:
var _entitylist =
from cheque in context.postDatedCheques
join app in context.applications on cheque.appSancAdvice.application equals app
select cheque;
编辑:
使用.Contains(...)
解决方案将被转换为SQL IN
语句。 这将是非常低效的。 Linq join
被翻译成SQL INNER JOIN
,如果你的数据库模式修剪得很好(FKs,index),这是非常有效的。
关于什么?
IEnumerable<postDatedCheque> _entityList = context.postDatedCheques.Where(
e => context.applications.Any(
x => e.appSancAdvice.application.app_id == x.app_id));
如果您想使用两个语句,请将第一个语句设置为表达式函数。
Expression<Func<string, bool>> innerQuery =
x => context.applications.Any(y => y.app_id == x);
IEnumerable<postDatedCheque _entityList =
context.postDatedCheques.Where(
x => innerQuery(x.appSancAdvice.application.app_id));
innerquery
是一个包含app_id
的匿名类型的IQueryable。
Contains(e.appSancAdvice.application.app_id)
这一行没有意义,因为e.appSancAdvice.application.app_id
和匿名类型不是同一类型。
简单地做:
var _entityList = context.postDatedCheques
.Where(e =>
context.applications
.Select(a => a.app_id)
.Contains(e.appSancAdvice.application.app_id));
链接地址: http://www.djcxy.com/p/75251.html
上一篇: Subquery in Where Clause of LINQ statement
下一篇: Autocomplete display data based on value in dropdownlist