C# 使用where子句创建LINQ

C# 使用where子句创建LINQ,c#,.net,linq,C#,.net,Linq,我有这个LINQ: private static object getObjectModels(DbContext context, IQueryable<int> contractsID) { return (from objectModel in context.Set<ObjectModel>() where "column named conId contains contractsID "

我有这个LINQ:

    private static object getObjectModels(DbContext context, IQueryable<int> contractsID)
    {
        return (from objectModel in context.Set<ObjectModel>()
                where "column named conId contains contractsID "
                select new ContractHelper
                {
                    Id = contract.Id,
                    ClientId = contract.ClientId,
                });
    }
私有静态对象getObjectModels(DbContext上下文,IQueryable contractsID)
{
返回(来自context.Set()中的objectModel)
其中“名为conId的列包含contractsID”
选择新的ContractHelper
{
Id=contract.Id,
ClientId=contract.ClientId,
});
}
我需要从名为conID的列具有contractsID值的表记录中进行选择

contractsID是int数组。 圆锥曲线是整数值列

我在这一行写了什么: 其中“名为conId的列包含contractsID”
要获取列conID中的项与contractsID数组中的项相等的所有记录,您可以反转where子句并使用“contains”,例如:

private static object getObjectModels(DbContext context, IQueryable<int> contractsID)
    {
        return (from objectModel in context.Set<ObjectModel>()
                where objectModel.conId.HasValue && contractsID.Contains(objectModel.conId)
                select new ContractHelper
                {
                    Id = contract.Id,
                    ClientId = contract.ClientId,
                });
    }

您可以反转where子句并使用“contains”,例如:

private static object getObjectModels(DbContext context, IQueryable<int> contractsID)
    {
        return (from objectModel in context.Set<ObjectModel>()
                where objectModel.conId.HasValue && contractsID.Contains(objectModel.conId)
                select new ContractHelper
                {
                    Id = contract.Id,
                    ClientId = contract.ClientId,
                });
    }

可以使用int数组使linq转换为正确的SQL语法

  private static object getObjectModels(DbContext context, IQueryable<int> contractsID)
    {
         // Necessary to translate Contains to SQL IN  CLAUSE
        int [] contractIdsArray = contractsID.ToArray() ; 

        return (from objectModel in context.Set<ObjectModel>()
                where contractIdsArray.Contains(objectModel.conId)
                select new ContractHelper
                {
                    Id = contract.Id,
                    ClientId = contract.ClientId,
                });
    }
私有静态对象getObjectModels(DbContext上下文,IQueryable contractsID)
{
//必须将Contains转换为SQL IN子句
int[]constractDSArray=contractsID.ToArray();
返回(来自context.Set()中的objectModel)
其中contractDSArray.Contains(objectModel.conId)
选择新的ContractHelper
{
Id=contract.Id,
ClientId=contract.ClientId,
});
}

您可以使用int数组使linq转换为正确的SQL语法

  private static object getObjectModels(DbContext context, IQueryable<int> contractsID)
    {
         // Necessary to translate Contains to SQL IN  CLAUSE
        int [] contractIdsArray = contractsID.ToArray() ; 

        return (from objectModel in context.Set<ObjectModel>()
                where contractIdsArray.Contains(objectModel.conId)
                select new ContractHelper
                {
                    Id = contract.Id,
                    ClientId = contract.ClientId,
                });
    }
私有静态对象getObjectModels(DbContext上下文,IQueryable contractsID)
{
//必须将Contains转换为SQL IN子句
int[]constractDSArray=contractsID.ToArray();
返回(来自context.Set()中的objectModel)
其中contractDSArray.Contains(objectModel.conId)
选择新的ContractHelper
{
Id=contract.Id,
ClientId=contract.ClientId,
});
}

你需要在子句中复制一个
:你需要在
子句中复制一个
:objectModel.conId列是可空的,所以我在尝试使用你的示例时会出错。有没有wy来修复它?我会用一个建议更新我的答案,不过我手头没有EF项目来测试它!objectModel.conId列可为空,因此我尝试使用您的示例时出错。是否有wy来修复它?我将用建议更新我的答案,但我手头没有EF项目来测试它!