【发布时间】:2014-05-14 17:43:55
【问题描述】:
我一直在尝试在 linq to sql 中实现 IN 子句。 SQL 语句为:
SELECT KitId,PartId
FROM Kits k
WHERE k.PartId IN(
SELECT Id
FROM Parts p
WHERE CustomerId > 1 AND CustomerId < 100
我已经阅读了一些关于此的 SO 条目,并且到目前为止:
var subquery = (from p in Parts where p.Id > 1 && p.Id < 100 select new {p.ID}).ToArray();
var query = (from k in Kits
where subquery.Contains(k.PartId)
select k).ToList();
第二条语句有编译错误: 委托“System.Func”不接受 1 个参数 无法将 lambda 表达式转换为类型“字符串”,因为它不是委托类型 'AnonymousType#1[]' 不包含 'Contains' 的定义,并且最佳扩展方法重载 'System.Linq.Queryable.Contains(System.Linq.IQueryable, TSource)' 有一些无效参数 实例参数:无法从 'AnonymousType#1[]' 转换为 'System.Linq.IQueryable'
将数组代入第二条语句: int[] 子查询 = {1,2,3};
结果成功。我将如何操作第一个数组以得到一个简单的整数数组?
编辑:将第一条语句更改为以下语句会执行第二条:
var subquery = from p in ctx.Parts
where p.CustomerId > 1 && p.CustomerId < 10
select p.Id
【问题讨论】: