与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数组中相等的所有记录?

+2

你需要复制一个'IN'子句:[http://*.com/questions /959752/where-in-clause-in-linq](http://*.com/questions/959752/where-in-clause-in-linq) – markpsmith

您可能能够反转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, 
       }); 
    }