C# 使用where子句创建LINQ
我有这个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 "
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项目来测试它!