与where子句
问题描述:
我有这样的LINQ创建LINQ:与where子句
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,
});
}
我需要在那里命名conID列有contractsID的值,从表中的记录进行选择。
contractsID是int数组。 conID是int值列。
我在这一行写了什么: 其中“列名称conId包含contractsID” 以获取列conID的所有记录都与项目在contractsID数组中相等的所有记录?
答
您可能能够反转where子句,并使用“包含”,如:
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,
});
}
您可能需要但到IQueryable的转换到一个列表。
var myIds = contractIDs.ToList();
...
where myIds.Contains(objectModel.conId)
...
+0
objectModel.conId列可为空,所以我得到错误,当Itry使用你的例子。是否有任何问题需要解决? – Michael
+0
我会用一个建议来更新我的答案,我没有EF项目来手工测试它! –
答
你可以用一个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,
});
}
你需要复制一个'IN'子句:[http://*.com/questions /959752/where-in-clause-in-linq](http://*.com/questions/959752/where-in-clause-in-linq) – markpsmith