c# - LINQ 到 SQL : Implementing the IN clause

标签 c# linq entity

我一直在尝试在 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();

第二条语句存在编译错误: 委托(delegate)“System.Func”不接受 1 个参数 无法将 lambda 表达式转换为类型“string”,因为它不是委托(delegate)类型 “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

最佳答案

像这样定义子查询:

var subquery = (from p in Parts where p.Id > 1 && p.Id < 100 select p.ID).ToArray();

您需要实际 ID,而不是具有单个 ID 值的匿名类型。

您也不应该需要 ToArray() 部分,如果将​​其定义为查询应该会更快

var subquery = from p in Parts where p.Id > 1 && p.Id < 100 select p.ID

因此只进行一次数据库调用,而不是两次。

关于c# - LINQ 到 SQL : Implementing the IN clause,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23661577/

相关文章:

c# - ASP.NET Web API Post 方法错误

c# - 合并列表中实体的两个属性并使用 Linq 将其展平

serialization - Symfony 4序列化没有关系的实体

database - Symfony2 : get the id of the persisted object

java - 如何禁用基于一个字段的实体更新?

c# - 在 C# 中使一个函数或一组语句线程安全的最佳方法是什么?

c# - LINQ to Entities 无法识别方法 'Int32 Next()' 方法

c# - 我应该将我的接口(interface)定义放在与其实现相同的 namespace 中吗

c# - 有没有一种方法可以根据参数更改 LINQ 查询 orderBy?

linq - 如何使用 LINQ 选择特定的子节点?